TCP为什么能够保证可靠传输?个人理解是,它实现了数据重传和应答响应。
1、TCP建立连接
TCP建立连接需要三次握手,要经历请求、确认请求、确认收到请求的步骤,在握手过程中有一些重要的数据传输。
客户端请求建立连接的时候,会把TCP头部的SYN位置1,相当于发送一个SYN给服务器,还会附带一个序列号以及一个自身的MSS(maximum segment size,最大传输段),序列号是用来标记当前字节流的;
服务器收到请求以后,发送确认信息,TCP头部的ACK位被置1,SYN位也被置1,一个确认号(上一步的序列号加1),一个序列号,一个自身的MSS;
客户端收到数据后,再次发送SYN,ACK,确认号(上一步的序列号加1),以及两个MSS的最小值给服务器,至此就建立了一个TCP连接。MSS的作用是确认客户端和服务器数据传输窗口的大小。
2、TCP的拥塞控制
TCP拥塞控制有两种模式,四种策略。
第一种是慢启动+拥塞避免,启动窗口设置为一个MSS长度,然后每次扩大两倍。如果达到了阈值,则开始执行拥塞避免算法,每次增大一个MSS长度。当网络发生拥塞时(判断标准是发生了超时重传),则立刻把阈值下降为原来的一般,把窗口下降为1,然后重新执行慢启动算法;
第二种是快重传+快恢复,机理是如果接收端发现有包不是按照序列号发送的,则发送重传请求,如果发送端连续收到了三个对同一个序列号的重传请求,则认为发生了拥塞(上个算法需要等到超时重传),然后执行快恢复算法,把阈值降到原来的一半,然后把窗口降到阈值加3个MSS(根据数量守恒),然后执行拥塞避免算法;
接收端收到不按顺序的包的时候,先不处理后面的包,把他们先放到一个缓存里,等前面的包到了以后,一起发送一个确认号给发送端。
个人认为,发送端的超时重传和接收端的应答机制,保证了TCP是可靠传输。
附:TCP和UDP的帧格式
UDP的头很简单,16位目标端口,16位源端口,16位包长度,16位校验和;
TCP的头相对复杂,16位目标端口,16位源端口,32位序列号,32位请求号,SYN,ACK等一些控制信息,16位校验和;
3、网络号,子网掩码,主机号,网关
一个子网内的主机数量+网络地址+网关地址+广播地址=子网总共能够分配的ip地址。子网内ip起始于网络地址,结束于广播地址。
4、ABCDE五类网络
A:0开头;B:10开头;C:110开头;D:1110开头;E:11110开头。
A:政府单位;B:企业;C:个人、私营;D:局域网;E:保留;
A子网掩码默认为/8,B默认为/16,C默认为/24
5、不同主机通信
如果两个主机位于同一个子网(判断方法:IP和子网掩码),则直接调用网络层的ARP协议,向目标主机发送请求,解析器MAC地址,源主机收到之后把MAC地址发送给二层,打包三层传过来的数据,一并发送给目标主机。
如果两个主机不位于同一个子网,则源主机请求网关的MAC地址,然后把数据发送给网关,网关再根据IP,把数据发送给相应的网关。
6、不同协议使用相同端口
例如TCP和UDP都是用80端口,是没有问题的, 因为数据会先解析,区分是TCP还是UDP,然后在根据端口确认是哪个服务程序。
7、七层协议的理解
物理层:不是指物理媒介,而是指对物理媒介的一些电器规范标准,以及实现模数/数模转换,这一层传输的数据格式是bit;
数据链路层:把数据分割成帧,每一帧的格式是“目标MAC,源MAC,类型,数据,FCS”,每帧的长度控制在164Byte~1518Byte,如果太短则会认为是噪声,如果太长会出错。这一层实现简单的连接,避免物理层信号冲突,中间节点叫交换机(早期为网桥);
网络层:负责路由选择、拥塞控制、网络互连,IP就位于这一层,这一层的数据格式是包,中间节点叫路由器;
传输层:最重要的一层,把上层的数据打包分发给网络层,TCP、UDP都位于这一层。