计算机网络-TCP

一、目录

计算机网络-TCP_第1张图片
网络知识结构

(最近复习了网络相关的知识,在这进行一次总结,后续会有更新。)

二、网络基础

OSI七层协议,从下往上
(1)物理层
(2)数据链路层
(3)网络层
(4)传输层
(5)会话层
(6)表示层
(7)应用层

三、TCP的三次握手

1、TCP的三次握手
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送SYN包(seq = x)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN+RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

2、为什么需要三次握手才能建立起连接
为了初始化Sequence Number的初始值。

3、首次握手的隐患--SYN超时
(1)、问题起因分析:
a、Server收到Client的SYN,回复SYN-ACK的时候未收到ACK确认。
b、Server不断重试直至超时,Linux默认等待63秒才断开连接。(5次)
(2)针对SYN Flood的防护措施
a、SYN队列满后,通过tcp_syncookies参数回发SYN Cookie
b、若为正常连接则Client会回发SYN Cookie,直接建立连接

4、建立连接后,Client出现故障怎么办
保活机制
(1)向对方发送保活探测报文,如果未收到响应则继续发送
(2)尝试次数达到包活探测数仍未收到响应则中断连接

四、TCP的四次挥手

TCP采用四次挥手来释放连接:
第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态;
第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态;
第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态;
第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为序号+1,Server进入CLOSED状态,完成四次挥手;

五、TCP和UDP

1、UDP的特点
(1)面向非连接
传输数据之前源端和终端不建立连接,当它想传送时就简单的去抓取来自应用程序的数据,并尽可能快的把它扔到网络上,在发送端UDP传送数据的速度仅仅是受应用程序生成数据的速度,计算机的能力和传输带宽的限制,在接收端UDP把每个消息段放在队列中,应用程序每次从队列中读取一个消息段。
(2)不维护连接状态,支持同时向多个客户端传输相同的消息
(3)数据包报头只有8个字节,额外开销较小
(TCP20个)
(4)吞吐量只受限于数据生成速率、传输速率以及机器性能
(5)尽最大努力交付,不保证可靠交付,不需要维持复杂的链接状态表
(6)面向报文,不对应用程序提交的报文信息进行拆分或者合并
2、TCP和UDP的区别
(1)面向连接 VS 无连接
(2)可靠性
(3)有序性
(4)速度
(5)量级

六、TCP的滑窗

1、RTT和RTO
(1)RTT:发送一个数据包到收到对应的ACK,所花费的时间;
(2)RTO:(Retransmission timeout)重传时间间隔
TCP在发送一个数据包之后,会启动一个重传定时器,而RTO就是这个定时器的重传时间
2、TCP的滑动窗口
TCP使用滑动窗口做流量控制与乱序重排
(1)保证TCP的可靠性
(2)保证TCP的流控特性

七、总结

本文先复习了TCP的相关知识,有关HTTP和Socket的知识会在后面的文章继续复习。

你可能感兴趣的:(计算机网络-TCP)