在看 TCP/IP 协议卷的时候, TCP 服务连接后,断开之前如果不考虑报文丢失之类的话,服务端一直都是在确认客户端发送来的序列号和报告自己的窗口大小。但是服务器要是向客户端回传一个信息呢?比如 http 请求的时候回复一个网页,那么客户端是如何确认的呢?是这个时候服务器和客户端的角色交换了吗?如果交换的话,那是不是还得三次握手?
1
misaka19000 2016-12-20 09:18:29 +08:00 via Android
不是很熟悉 TCP ,我记得好像有个 ACK 可以用于确认送达了吧?
|
2
pagxir 2016-12-20 09:20:57 +08:00 via Android
你确定你认真看啦。你不知道 tcp 连接的数据传输是双向的么
|
4
HunterPan 2016-12-20 09:23:57 +08:00
ack 你看到没有..
|
5
SevenJ 2016-12-20 09:24:41 +08:00
建立链接后, client 和 server 对于 TCP 来说就没啥区别,双方都 Ack, Seq, 你用 wireshark 可以抓包看下
|
6
flicker317 2016-12-20 09:25:06 +08:00
TCP 是全双工的, 3 次握手完成, 建立连接后, 客户端与服务端是等价的, 一端发送信息, 另一端都要用单独的 ack 报文确认, 有时候 ack 会跟着数据报文捎带过去. http 协议是单工的, 一次 http 请求经过下面几个过程, http request(client), http request ack(server), http response(server), http response ack(client)
|
7
nfroot 2016-12-20 09:26:27 +08:00 1
TCP 通讯的时候会反复确认“你 TM 收到这一段没?”,对方反馈收到了就传下一段。(实务中会多段一起发送,哪段没收到重发哪段)
而 UDP 是一窝蜂的传过去,管你收不收得到。 |
8
BOYPT 2016-12-20 09:27:51 +08:00
“服务端一直都是在确认客户端发送来的序列号和报告自己的窗口大小”
这里理解错了,应该是“双方一直都是在确认对方发送来的序列号和报告自己的窗口大小” |
9
pumpkin OP |
12
BOYPT 2016-12-20 09:51:48 +08:00
@pumpkin 不过发送方的“窗口”不是完整窗口,而是根据对方的接受窗口估算一个发送长度,一定要理解成对方窗口的同步状态也不是不行;
|
13
easing 2016-12-20 13:12:09 +08:00 via Android
TCP 是双工的
|