首页 > 试题广场 >

下列关于网络编程错误的是()

[不定项选择题]
下列关于网络编程错误的是()
  • TCP建立和关闭连接都只需要三次握手
  • 主动关闭的一端会出现TIME_WAIT状态
  • 服务端编程会调用listen(),客户端也可以调用bind()
  • UDP是可靠服务
A.tcp建立连接需要三次握手,断开连接需要四次握手;因为服务端的LISTEN状态下socket当收到syn报文请求连接后,可以把syn和ack放进同一个报文里发送。但关闭连接时,当收到对方发来的FIN报文通知时,仅仅表示对方没有数据发送给自己了,不代表自己没有数据要发送给对方,此时仍可以发送一些数据给对方后,再发送FIN报文关闭连接。
B.被动端关闭时仅有两个状态,close_wait和last_ack状态。
C.bind()把一个本地协议地址,赋予一个套接字,两端均可以使用
D.UDP是不可靠的服务。

发表于 2016-07-18 11:25:03 回复(0)
对于C选项
 有连接的socket客户端通过调用Connect函数在socket数据结构中保存本地和远端信息,无须调用bind(),因为这种情况下只需知道目的机器的IP地址,而客户通过哪个端口与服务器建立连接并不需要关心,socket执行体为你的程序自动选择一个未被占用的端口,并通知你的程序数据什么时候打开端口。(当然也有特殊情况,linux系统中rlogin命令应当调用bind函数绑定一个未用的保留端口号,还有当客户端需要用指定的网络设备接口和端口号进行通信等等)
总之:
1.需要在建连前就知道端口的话,需要 bind 
2.需要通过指定的端口来通讯的话,需要 bind

发表于 2015-09-11 21:11:30 回复(0)
三次握手,四次挥手:
3次握手的特点:
1.客户端向服务端发送连接请求,SYN=x,客户端进入SYN_SEND状态,等待服务器确认;
2.服务器收到SYN消息后给出请求应答SYN=x+1,ACK=y,服务器进入SYN_RECV状态;
3.客户端收到ACK+SYN包后,向服务器发送确认消息(SYN+1)。此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
4次断开
1 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求
2 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1
3 由B 端再提出反方向的关闭请求,将FIN置1
4 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束.
发表于 2015-09-11 19:48:48 回复(5)
你,居然选的是错误的
发表于 2023-09-26 20:50:14 回复(0)
为啥B错了呢
发表于 2021-12-16 16:44:21 回复(0)
TCP建立连接三次握手:
客户端发送联机报文SYN=1,并设置发送序号Seq为X 
服务端收到联机报文后,发送联机报文SYN=1,确认报文ACK=发送序号+SYN=X+1,并设置发送序号Seq为Y
客户端收到联机报文后,发送确认报文ACK=发送序号+SYN=Y+1,并设置发送序号Seq为Z
特别点:通过不同的发送序号代表不同的请求,当双方各向对方发送一次联机报文、一次确认报文后即会建立连接,而确认报文为联机报文+发送序号,表示接受到对方最近的一次的请求

TCP关闭连接4次挥手:
客户端发送结束报文FIN=1,确认报文ACK=X,并设置发送序号Seq为X
收到结束报文后,服务端发送确认报文ACK=发送序号+FIN=X+1,并设置发送序号Seq为Y
                服务端再发送结束报文FIN=1,确认报文ACK=发送序号+FIN=X+1,并设置发送序号Seq为Z
收到结束报文后,客服端发送确认报文ACK=发送序号+FIN=Z+1,并设置发送序号Seq为X
特别点:双方各向对方发送一次结束报文、两次确认报文后便会断开连接

发表于 2021-09-02 15:30:19 回复(0)

客户端过程:socket() ->  bind()( 可选的 )-> connect()

服务器过程:socket() -> bind()  -> listen() -> accept()

发表于 2021-08-07 17:55:43 回复(0)
<p>错误的是....</p>
发表于 2020-12-24 19:46:10 回复(0)
B哪里错了?
发表于 2018-12-15 15:33:16 回复(0)