总结学习的内容
目录
TCP头部信息
TCP Timestamps Option 有四个部分:
发送方时间戳、回显时间戳
TCP 使用时间戳用于解决以下问题:
- 计算往返时延RTT(发送接收时间差,重传)
- 防止序列号回绕问题(TCP的序列号用32bit 来表示,在2^32字节的数据传输后序列号就会溢出回绕,变回0。TCP的窗口经过窗口缩放最高可以到1GB(2^30),在高速网络中,序列号很短的时间内就会被重复使用)重传了 但是之前那个包没有丢失(迷途的数据包) 区分有相同序列号的包,减少数据混乱
TCP的超时重传时间
间隔一段时间没有等到数据包的回复时,会重传这个数据包,这个重传间隔叫做超时重传时间(RTO)
TCP的流量控制
对于发送端和接收端而言,TCP 需要把发送的数据放到发送缓存区,将接收的数据放到接收缓存区。
而流量控制要做的事情,就是在通过接收缓存区的大小,控制发送端的发送。如果对方的接收缓存区满了,就不能再继续发送了。
为了控制发送端的速率,接收端会告知客户端自己接收窗口 (rwnd)大小,也就是接收缓冲区中空闲的部分。
发送端的数据包的状态
- 已发送且已确认
- 已发送但未确认
- 未发送但接收端可以接收(接收端有空间接收)
- 未发送且不可以发送(接收端没空间接收)
A B两个主机之间建立了一个TCP 连接,A 主机发给 B 主机两个TCP 报文,大小分别是500 和300,第一个报文的序列号是 200,那么 B 主机接收两个报文后,返回的确认号是多少?
1000 = 500 + 300 + 200
收到IP数据包解析以后,如何知道这个分组应该投递到上层的那个协议?
协议:Linux中,上层协议对应的协议字段,ICMP为1,TCP为6,UDP为17。
TCP 和 UDP 区别
TCP是一个面向连接的、可靠的、基于字节流的传输层协议。
而UDP是一个面向无连接的传输层协议面向连接。
所谓的连接,指的是客户端和服务器的连接,在双方互相通信之前,TCP需要三次握手建立连接,而UDP 没有相应建立连接的过程。
可靠性。TCP花了非常多的功夫保证连接的可靠,这个可靠性体现在哪些方面呢?
1)TCP有状态:TCP会精准记录哪些数据发送了,哪些数据被对方接收了,哪些没有被接收到,而且保证数据包按序到达,不允许半点差错
2)TCP可控制:意识到丢包了或者网络环境不佳,TCP 会根据具体情况调整自己的行为,控制自己的发送速度或者重发
给QQ设计一个网络协议
登陆采用TCP协议和HTTP协议,你和好友之间发送消息,主要采用UDP协议,内网传文件采用了P2P技术。
总来的说:
1.登陆过程,客户端client 采用TCP协议向服务器server发送信息,HTTP协议下载信息。登陆之后,会有一个TCP连接来保持在线状态。
2.和好友发消息,客户端client采用UDP协议,但是需要通过服务器转发。腾讯为了确保传输消息的可靠,采用上层协议来保证可靠传输。如果消息发送失败,客户端会提示消息发送失败,并可重新发送。
3.如果是在内网里面的两个客户端传文件,QQ采用的是P2P技术,不需要服务器中转