家居企业网站建设如何,seo网站推广培训,北京企业网站建设飞沐,微信营销的模式不包括TCP协议
TCP协议作用 TCP协议位于协议栈的传输层。当应用层向TCP层发送用于网间传输的#xff0c;用8字节表示的数据流#xff0c;TCP则吧数据流分割成适当长度的报文段#xff0c;最大传输段大小#xff08;MSS#xff09;通常受到改计算机连接的网络数据链路层的最大传…TCP协议
TCP协议作用 TCP协议位于协议栈的传输层。当应用层向TCP层发送用于网间传输的用8字节表示的数据流TCP则吧数据流分割成适当长度的报文段最大传输段大小MSS通常受到改计算机连接的网络数据链路层的最大传送单元MTU限制例如路由器每次传输数据的大小是固定的并且是可以设置的这个传输值就是MTU。之后TCP吧数据包床底给IP层由他来通过网络将包传送给接收端实体的TCP层。 TCP为了保证报文传输的可靠性就给每个包一个序号同时序号也保证传送到接收端实体的包的按顺序接收然后接收端实体对已成功收到的字节发回一个相应的确认ACK如果发送端实体在合理的往返时延RTT内未收到确认那么对应的数据假设丢失将会重传。 在数据正确性与合法性上TCP用一个 “校验和函数” 来检验数据是否有错误在发送和接收时都要计算校验和同时可以使用md5认证对数据进行加密在保证可靠性上采用超时重传和捎带确认的机制在流量控制上采用滑动窗口协议协议中规定对窗口内未经确认的分组需要重传 在阻塞控制上采用TCP拥塞控制算法也称为AIMD算法。改算法主要包括三个主要部分 加性增乘性减慢启动对超时事件做出反应
TCP的报头
和协议一样TCP协议也有他的报头部分。一下图表示 源端口发送方的端口号目的端口接受方的端口号序号发送方的序号确认序号接收方得到序号后回复的确认序号ACK需要TCP首部长度4bit以32-bit字为单位。TCP首部长度也是TCP报文数据部分的偏移量范围5~15即20bytes ~50bytes可选项部分最多允许40bytes标志位主要用于标记该报文当前状态 URG指示报文中有紧急数据应该尽快传送相当于高优先级的数据ACK确认序号AN有效PSH接到后尽快交付给接收的应用进程RSTTCP链接中出现严重差错例如服务器宕机必须释放链接在重新建立连接SYN处于TCP链接建立过程FIN发送端已经完成数据传输请求释放链接
TCP协议连接三次握手 TCP是一个面向连接的协议在每一层传输数据前客户端和服务端需要进行连接这个链接就是三次握手过程。 第一次客户端向服务器发送一个SYNSEQ x 客户端序号报文给服务器端进入SYN_SEND状态第二次服务器端收到SYN报文回应一个SYNSEQ y 服务端序号ACKACK x1 确认号 客户端序号 1报文进入SYN_RECV状态第三次客户端收到服务器端的SYN报文回应一个ACKACK y1报文进入Established状态。 如下图 三次握手的意义为啥不是两次因为两次通信后客户端与服务器端都处于准备好状态第三次是不是多余了 答案是两次握手时服务器提前进入准备状态之后如果中途遇到网络中断消息没有回传给客户端客户端将永远借不到服务器的给入状态那么服务端将资源浪费在一个不存在的连接上。 三次握手并不保证绝对安全 在三次握手过程中Server发送SYN-ACK后收到Client的ACK之前的TCP链接称为半连接half-open connect此时Server处于SYN_RCVD状态当收到ACK后Server转入ESABLISHED状态。SYN攻击就是在Client在短时间内伪造大量不存在IP地址并向Server端不断发送SYN包Server回复确认包并等待Client的确认由于源地址是不存在的因此Server需要不断重新发送直到超时这些伪造的SYN包将长时间占用服务端未连接队列导致正常SYN请求因为队列满无法进入而被丢弃从而引起完了阻塞甚至系统瘫痪。SYN攻击时一种典型的DDOS攻击检查SYN攻击的方式非常简单即当Server上有大量半连接状态并且IP地址是随机地址则可以断定遭到SYN攻击可以用如下命令查看
#netstat -nap | grep SYN_RECVTCP协议断开连接时候四次挥手 既然TCP面向连接那么肯定也有断开连接的操作一个TCP完整的断开需要进行四次挥手。 第一次客户端向服务器发送FIN ACK 报文同时携带序号为 X客户端进入FIN-WAIT1第二次服务器端回复ACK报文。附带序号Z和确认序号X1表示服务器已经接收到客户端的报文。但是由于服务器可能还在处理事务因此报文并不会携带FIN标志。状态CLOSE WAIT第三次在一段时间后服务器已经处理完毕发送带有FIN和ACK的报文序号为Y确认序号为X 1.状态ACK-LAST第四次客户端发送ACK报文序号X1确认序号Y1。客户端进入TIME_WAIT。服务端进入CLOSE初始状态。 如上图所示我们关闭连接是四次挥手过程但是建立连接是三次握手断开多了一个过程 这是因为在连接过程中服务器在LISTEN状态下收到建立连接请求的SYN报文后把ACK和SYN放再一个报文给客户端了。而关闭连接时候当收到对方的FIN报文时候仅仅标识对方不在发送数据了但并不表示不在接受数据并且服务端此时并不能保证已经将全部数据发送给对方所以服务器方可以立即iclose也可以发送一些数据给对方后在发送FIN报文给对方来表示现在关闭连接因此服务端ACK和FIN一般会分开发送在这里就多了一个步骤 在TIME_WAIT状态需要经过2MSL最大报文段生存时间才能返回到CLOSE状态有如下两个原因 第一保证TCP协议的全双工连接能够可靠关闭保证这次连接的重复数据段从网络中消息
上一篇 网络编程-TCP/IP协议栈-IP协议 下一篇 网络编程-TCP/IP协议栈-UDP/HTTP协议