tcp四次挥手

简述同步IO、异步IO、阻塞IO、非阻塞IO之间的联系与区别

匿名 (未验证) 提交于 2019-12-02 23:55:01
1、TCP拥塞如何控制? (1)滑动窗口:TCP中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据 滑动窗口指出接收缓冲区中的可用空间,从而确保发送方发送的数据不会溢出缓冲区。 窗口时刻动态变化:当接收发送发数据时,窗口大小减小;当接收方从缓冲区中读取数据时,窗口大小增大。 TCP的接收缓冲区满,它必须等待应用程序从这个缓冲区读取数据后才能再接收发送方传来的数据。 UDP不提供流控制,按发送方的速率发送数据,不管接收方的缓冲区是否装得下。 ## 参考文献:《UNIX网络编程》 (2)TCP拥塞的原因:在早期的时候,通信的双方不知道网络的状况,所以过程中可能会出现中间节点阻塞丢包,所以就有了滑动窗口机制来解决这个问题。 (3)滑动窗口协议:用于网络数据传输时的流量控制,以避免拥塞的发生。如果过多的发送方同时以很快的速度发送大量的数据包,接收方有可能并没有那么高的接收数据能力,因此极易导致网络的拥塞(并发服务器)。 (4)滑动窗口的值:网络中没有出现拥塞,滑动窗口的值可以增大一些(以便把更多的数据包发送出去);网络出现拥塞,滑动窗口的值应该减小一些(以减少注入到网络中的数据包数) (5)拥塞控制算法: 基于丢包的拥塞控制:将丢包视为出现拥塞,采取缓慢探测的方式,逐渐增大拥塞窗口,当出现丢包时,将拥塞窗口减小,如Reno、Cubic等。

TCP协议之网络延时

匿名 (未验证) 提交于 2019-12-02 23:55:01
影响TCP 网络时延的因素 硬件速度 网络和服务器的负载 请求和响应报文的尺寸 客户端和服务器之间的距离 TCP 协议的技术复杂性 TCP协议产生的时延 TCP 连接建立握手; TCP 慢启动拥塞控制; 数据聚集的 Nagle 算法; 用于捎带确认的 TCP 延迟确认算法; TIME_WAIT 时延和端口耗尽。 TCP连接建立 TCP连接的建立,需要经历3个报文的交互过程,沟通相关连接参数,这个过程称为三次握手(three-way handshake)。 因此,如果在每次发送数据之前,都重新建立一次TCP连接,那么建立连接的耗时将对性能产生较大的影响(特别是在发送少量数据的情况下)。 三次握手四次挥手(参考自coolshell) 优化方法 建立长连接,多次数据的发送复用同一条连接。 TCP慢启动 如果在发送方和接收方之间存在多个路由器和速率较慢的链路,此时多个发送方一开始便向网络发送多个报文段,由于受网络传输和服务端处理能力的影响,一些中间路由器必须缓存分组,并有可能最终耗尽存储器的空间,因而更多的报文发送将使网络出现拥塞。 TCP慢启动(slow start),就是用于防止因特网的突然过载和拥塞的一种流量控制机制。 慢启动为发送方的TCP增加了一个窗口:拥塞窗口(congestion window),简称cwnd。 刚建立连接时,拥塞窗口被初始化为1个报文段。每收到一个ACK

网络协议: TCP/IP 和UDP/IP

匿名 (未验证) 提交于 2019-12-02 23:47:01
TCP/IP UDP /IP TCP/IP TCP/IPTransmission Control Protocol/Internet Protocol)是一种可靠的网络数据传输控制协议。定义了主机如何连入因特网以及数据如何在他们之间传输的标准。 TCP/IPTCP/IP 每一个抽象层建立在低一层提供的服务上,并且为高一层提供服务 ICMP:控制报文协议 IGMP:internet组管理协议 ARP:地址解析协议 RARP:反向地址转化协议 OSI模型(开放式系统互联通信参考模型),它是由国际标准化组织提出的,试图使各种计算机在世界范围内互联为网络的标准框架 OSI模型多了表达层、会话层 3 次握手协议 所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立 (1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。 2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。 3

TCP三次握手和四次挥手

一世执手 提交于 2019-12-02 23:45:09
三次握手和四次挥手 转载链接: https://blog.csdn.net/hyg0811/article/details/102366854 带着如下问题进行阅读,收获会更大。 请画出三次握手和四次挥手的示意图 1 为什么连接的时候是三次握手? 2 什么是半连接队列? 3 ISN(Initial Sequence Number)是固定的吗? 4 三次握手过程中可以携带数据吗? 5 如果第三次握手丢失了,客户端服务端会如何处理? 6 SYN攻击是什么? 7 挥手为什么需要四次? 8 四次挥手释放连接时,等待2MSL的意义 1. 三次握手 三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。实质上其实就是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,交换TCP窗口大小信息。 刚开始客户端处于 Closed 的状态,服务端处于 Listen 状态。 进行三次握手: 第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN。此时客户端处于 SYN_SENT 状态。 首部的同步位SYN=1,初始序号seq=x,SYN=1的报文段不能携带数据,但要消耗掉一个序号。

TCP的连接和释放过程

匿名 (未验证) 提交于 2019-12-02 23:43:01
三次握手的过程 1)主机A向主机B发送TCP连接请求数据包,其中包含主机A的初始序列号seq(A)=x。(其中报文中同步标志位SYN=1,ACK=0,表示这是一个TCP连接请求数据报文;序号seq=x,表明传输数据时的第一个数据字节的序号是x); 2)主机B收到请求后,会发回连接确认数据包。(其中确认报文段中,标识位SYN=1,ACK=1,表示这是一个TCP连接响应数据报文,并含主机B的初始序列号seq(B)=y,以及主机B对主机A初始序列号的确认号ack(B)=seq(A)+1=x+1) 3)第三次,主机A收到主机B的确认报文后,还需作出确认,即发送一个序列号seq(A)=x+1;确认号为ack(A)=y+1的报文; 四次挥手过程

TCP入门

匿名 (未验证) 提交于 2019-12-02 23:42:01
报文头部格式 源端口 2字节 最大2^16-1 目的端口 2字节 TCP交互端口的意义:指明交互双方的身份是属于IP内的哪个进程 校验和 伪首部 先加个伪首部 伪首部共有12字节,包含如下信息:源IP地址、目的IP地址、保留字节(置0)、传输层协议号(TCP是6)、TCP报文长度(报头+数据)。 伪首部是为了增加TCP校验和的检错能力:如检查TCP报文是否收错了(目的IP地址)、传输层协议是否选对了(传输层协议号)等。 首先,把伪首部、TCP报头、TCP数据分为16位的字,如果总长度为奇数个字节,则在最后增添一个位都为0的字节。把TCP报头中的校验和字段置为0(否则就陷入鸡生蛋还是蛋生鸡的问题)。 其次,用反码相加法累加所有的16位字(进位也要累加)。 最后,对计算结果取反,作为TCP的校验和。 窗口 表示缓存最大可以接受多少字节 默认不设置窗口扩大因子时是64K 选项 可以设置窗口位移 常见对TCP选项有7种,其中kind=3是窗口扩大因子选项。TCP连接初始化时,通信双方使用该选项来协商接收通过的窗口扩大因子。假设TCP头部中的通告窗口大小为N,窗口扩大因子(位移数)是M,那么TCP报文段的实际接收通告窗口大小为:N * (2 ** M)。M的取值范围为0 ~ 14。这样的话, 通告窗口最大约为1GB ,能够满足大部分应用的需求。 序号:本包在本次单向传输是属于 第几个字节开始

TCP/IP详解

匿名 (未验证) 提交于 2019-12-02 23:34:01
TCP/IP协议(本文源自外部链接) TCP/IP不是一个协议,而是一个协议族的统称。里面包括IP协议、IMCP协议、TCP协议。 这里有几个需要注意的知识点: 互联网地址:也就是IP地址,一般为网络号+子网号+主机号域名系统:通俗的来说,就是一个数据库,可以将主机名转换成IP地址RFC:TCP/IP协议的标准文档端口号:一个逻辑号码,IP包所带有的标记Socket:应用编程接口数据链路层的工作特性: 为IP模块发送和接收IP数据报为ARP模块发送ARP请求和接收ARP应答(ARP:地址解析协议,将IP地址转换成MAC地址)为RARP发送RARP请求和接收RARP应答接下来我们了解一下TCP/IP的工作流程: 数据链路层从ARP得到数据的传递信息,再从IP得到具体的数据信息 IP协议 备注:总长为32位; 版本:IPV4/IPV6 首部长度:IP头长度 区分服务:(共8位,其中前三位和最后一位为空,即为0),中间为OTS服务,包含: 1000 最小传输/最小延迟 0100 最大吞吐量 0010 最高可靠性 0001 最小代价/成本 总长度:数据内容 标识:识别标识符 标志:共3位。第一位为空,第二位为禁止分片(DF),第三位为更多分片(MF) 片偏移:(涉及MTU最大传输值-1500,2的3次方倍数),位移量 生存时间(TTL):在寻址过程中,最多可寻找64个路由,超过则放弃 协议

关于http与https Tcp的三次握手四次握手

匿名 (未验证) 提交于 2019-12-02 23:05:13
http,全称Hyper Text Transfer Protocol ,https, 全称Hyper Text Transfer Protocol Secure, 三次握手为: 1.客户端发送连接请求,即SYN seq=x。 2.服务端接收客户端的连接请求,并且同样发送连接请求(SYN seq=y)和返回客户端请求的同意连接(ask=x+1)。 3.客户端接收服务端的连接请求,并且返回服务端请求的同意连接(ask=y+1)。 只要弄懂了三次握手,四次挥手很简单辣,因为四次就是将三次握手的第2步拆分了而已。为什么会拆分呢?是因为连接时必须同时进行连接,但是断开时,不一定同时断开,可能一方断开,另一方继续传输数据。 四次挥手为: 1.客户端发送断开请求,即FIN seq=x。 2.服务端接收客户端的断开请求,返回客户端请求的同意断开(ask=x+1)。 3.服务端发送断开请求,即FIN seq=y。 4.客户端接收服务端的断开请求,返回服务端请求的同意断开(ask=y+1)。

TCP四次挥手

匿名 (未验证) 提交于 2019-12-02 22:56:40
四次挥手图解: 工作过程: client向和Server终止连接,发送一个FIN+ACK(seq=a,ack=b)的数据段ACK表示对于上次传输的数据段的确认,FIN表示请求终止和Server的连接。 Server收到了Client的请求端口连接之后,响应一个ACK(seq=b,ack=a+1)的数据段a+1表示对于client的SYN报文的确认。 Server也想终止连接,也会发送一个FIN+ACK(seq=b,ack=a+1)的数据段FIN表示Server想终止连接,a+1表示对于client的SYN报文的确认,这两个报文相当于一个报文。 Client收到Server的ACK报文和FIN+ACK报文之后,会响应一ACK(seq=a+1,ack=b+1),ack=b+1,表示对于Server的FIN报文的确认。 报文: 第一次挥手 第二次挥手 第三次挥手 第四次挥手

TCP协议

匿名 (未验证) 提交于 2019-12-02 22:56:40
TCP头部信息:每 个TCP报文段,用于指定通信的源端端口号,目的端端口号,管理TCP连接,控制两个方向的数据流 TCP状态转移图 TCP数据流 TCP数据流的控制 特点: 面向连接,可靠传输,数据流。 TCP协议的使用要求: 双方必须先建立连接,再开始数据的读写。 双方必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。-》全双工,双方的数据读写可以通过一个连接进行,完成数据交换后,通信双方都必须断开连接以释放资源。连接为一对一,所以基于广播和多播的应用程序不能使用TCP服务。 数据流: 发送端执行的写操作次数和接收端执行的读操作次数之间没有任何数量关系。应用程序对数据的发送和接收没有边界限制。数据报:发送端应用程序每执行一次写操作,UDP模块就将其封装成一个UDP数据报发送,接收端必须及时针对每一个UDP数据报执行读操作,否则就会丢包,并且,没有指定足够的应用程序缓冲区来读取UDP数据,UDP数据将会被截断。 **可靠:**TCP采用发送应答机制,发送端发送的每个TCP报文段都必须得到接收方的应答,才认为这个TCP报文段传输成功。 TCP采用超时重传机制,发送端在发送出一个TCP报文段之后启动定时器,如果在定时事件内未收到应答,将重发报文段。 TCP的头部结构: 16位端口号:告知主机该报文段来自哪里以及传到哪个上层协议或者应用程序。(TCP通信时