tcp四次挥手

【网络编程】

你。 提交于 2019-11-27 20:20:06
原文: http://blog.gqylpy.com/gqy/227 " 目录 1.socket层 2.理解socket 3.套接字的发展史 4.网络基础 5.socket基本操作 6.socket进阶 7.黏包 8.解决黏包 8.socket的更多方法 1.socket层 2.理解socket socket是应用层与TCP/IP协议族的中间软件抽象层,它是一组接口。在设计模式中,socket其实就是一个面膜,它把复杂的TCP/IP协议族隐藏在socket接口后面,对于用户来说,一组简单的接口就是全部,让socket去组织数据,以符合指定的协议。 3.套接字的发展史 套接字起源于20世纪70年代 加利福尼亚 大学伯克利分校版本的Unix,即人们所说的BSD Unix。因此,有时人们也把套接字称为“伯克利套接字”或“BSD套接字”。一开始,套接字被设计用在同一台主机上多个应用程序之间的通讯,这也被称为进程间通讯或IPC。套接字有两种(或者称为有两个种族),分别是基于文件型的和基于网络型的。 基于文件类型的套接字家族:AF_UNIX unix下一切皆文件,基于文件的套接字调用的就是底层的文件系统来获取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信 基于网络类型的套接字家族:AF_INET 还有AF_INET6被用于ipv6,以及一些其他的地址家族

TCP的三次握手和四次挥手

爱⌒轻易说出口 提交于 2019-11-27 17:05:01
原文永久链接: https://github.com/AttemptWeb/Record/issues/10 上面有一篇专门介绍过 TCP和UCP协议 ,其中只是粗略的提到TCP协议的三次握手,而四次挥手完全没有说到,所以这次专门总结了这篇文章,专门讲讲三次握手和四次挥手。 备注:(下文中提到的专业术语) ack —— 确认号码 seq —— 顺序号码 ISN —— 初始序列号 ACK —— 确认,使得确认号有效(握手使用) SYN —— 用于初始化一个连接的序列号,建立联机 FIN —— 该报文的发送方已经结束向对方发送数据 # TCP的三次握手 三次握手 实际就是Client端和Server端建立稳定TCP连接的发送三个包的过程。 第一次握手:(SYN=1, ACK=0, seq=x): Client发送SYN标志位1的包到Server,以及初始序号x(保存在包头的序列号seq字段,简称ISN),和ACK标志位为0,并进入SYN_SEND状态,等待Server确认。 第二次握手:(SYN=1, ACK=1, seq=y, ack=x+1): Server发回确认包(ACK)应答。即 SYN 标志位和 ACK 标志位均为1。Server确认ISN序列号,放到seq域里,同时将确认序号(ack)设置为Client的ISN加1,即x+1。 发送完毕后,Server进入 SYN

TCP/IP协议

陌路散爱 提交于 2019-11-27 15:59:45
一、两种网络模型 或TCP/IP四层模模型 TCP/IP四层和五层协议模型和OSI模型的比较:   由上三图可以看出,OSI的 会话层、表示层和应用层联合起来称为TCP/IP的应用层,运输层、网络层   和TCP/IP的运输层、网络层一致, OSI中的数据链路层和物理层在TCP/IP中统称为网络接口层。 为什么会有这两种协议那?   OSI 七层模型是一种抽象模型,是学术上和法律上的国际标准,是完整的权威的网络参考模型。   而在操作系统实际实现中,采用的是TCP/IP四层网络模型,即现实生活中被广泛使用的网络参考模型。 二、TCP/IP协议三次握手 详解:    (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)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK=1,ack

TCP的三次握手与四次挥手

我的未来我决定 提交于 2019-11-27 15:56:32
TCP报文段的首部格式 序列号seq: 占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。 确认号ack: 占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。 确认ACK: 占1位,仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置为1。 同步SYN: 连接建立时用于同步序号。当SYN=1,ACK=0时表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使得SYN=1,ACK=1。因此,SYN=1表示这是一个连接请求,或连接接受报文。SYN这个标志位只有在TCP建产连接时才会被置1,握手完成后SYN标志位被置0。 终止FIN: 用来释放一个连接。FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接 PS: ACK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号。 字段 含义 URG 紧急指针是否有效。为1,表示某一位需要被优先处理 ACK

tcp/ip三次握手四次分手,撒手。。。。

非 Y 不嫁゛ 提交于 2019-11-27 14:31:30
‍ TCP/IP协议三次握手与四次撒手流程解析 一、TCP报文格式 TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。 (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。 (3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下: (A)URG:紧急指针(urgent pointer)有效。 (B)ACK:确认序号有效。 (C)PSH:接收方应该尽快将这个报文交给应用层。 (D)RST:重置连接。 (E)SYN:发起一个新连接。 (F)FIN:释放一个连接。 需要注意的是: (A)不要将确认序号Ack与标志位中的ACK搞混了。 (B)确认方Ack=发起方Req+1,两端配对。 二、三次握手 所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket 编程 中,这一过程由客户端执行connect来触发,整个流程如下图所示: 图2 TCP三次握手 (1)第一次握手:Client将标志位SYN置为1

TCP协议之网络延时

拟墨画扇 提交于 2019-11-27 14:15:48
影响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

【网络编程】 -- 2019-08-16 20:00:55

这一生的挚爱 提交于 2019-11-27 13:40:48
原文: http://blog.gqylpy.com/gqy/227 " 目录 1.socket层 2.理解socket 3.套接字的发展史 4.网络基础 5.socket基本操作 6.socket进阶 7.黏包 8.解决黏包 8.socket的更多方法 1.socket层 2.理解socket socket是应用层与TCP/IP协议族的中间软件抽象层,它是一组接口。在设计模式中,socket其实就是一个面膜,它把复杂的TCP/IP协议族隐藏在socket接口后面,对于用户来说,一组简单的接口就是全部,让socket去组织数据,以符合指定的协议。 3.套接字的发展史 套接字起源于20世纪70年代 加利福尼亚 大学伯克利分校版本的Unix,即人们所说的BSD Unix。因此,有时人们也把套接字称为“伯克利套接字”或“BSD套接字”。一开始,套接字被设计用在同一台主机上多个应用程序之间的通讯,这也被称为进程间通讯或IPC。套接字有两种(或者称为有两个种族),分别是基于文件型的和基于网络型的。 基于文件类型的套接字家族:AF_UNIX unix下一切皆文件,基于文件的套接字调用的就是底层的文件系统来获取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信 基于网络类型的套接字家族:AF_INET 还有AF_INET6被用于ipv6,以及一些其他的地址家族

【网络编程】 -- 2019-08-16 19:53:42

大城市里の小女人 提交于 2019-11-27 13:38:43
原文: http://blog.gqylpy.com/gqy/227 " 目录 1.socket层 2.理解socket 3.套接字的发展史 4.网络基础 5.socket基本操作 6.socket进阶 7.黏包 8.解决黏包 8.socket的更多方法 1.socket层 2.理解socket socket是应用层与TCP/IP协议族的中间软件抽象层,它是一组接口。在设计模式中,socket其实就是一个面膜,它把复杂的TCP/IP协议族隐藏在socket接口后面,对于用户来说,一组简单的接口就是全部,让socket去组织数据,以符合指定的协议。 3.套接字的发展史 套接字起源于20世纪70年代 加利福尼亚 大学伯克利分校版本的Unix,即人们所说的BSD Unix。因此,有时人们也把套接字称为“伯克利套接字”或“BSD套接字”。一开始,套接字被设计用在同一台主机上多个应用程序之间的通讯,这也被称为进程间通讯或IPC。套接字有两种(或者称为有两个种族),分别是基于文件型的和基于网络型的。 基于文件类型的套接字家族:AF_UNIX unix下一切皆文件,基于文件的套接字调用的就是底层的文件系统来获取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信 基于网络类型的套接字家族:AF_INET 还有AF_INET6被用于ipv6,以及一些其他的地址家族

【网络编程】 -- 2019-08-16 17:36:51

南笙酒味 提交于 2019-11-27 13:20:55
原文: http://blog.gqylpy.com/gqy/227 " 目录 1.socket层 2.理解socket 3.套接字的发展史 4.网络基础 5.socket基本操作 6.socket进阶 7.黏包 8.解决黏包 8.socket的更多方法 1.socket层 2.理解socket socket是应用层与TCP/IP协议族的中间软件抽象层,它是一组接口。在设计模式中,socket其实就是一个面膜,它把复杂的TCP/IP协议族隐藏在socket接口后面,对于用户来说,一组简单的接口就是全部,让socket去组织数据,以符合指定的协议。 3.套接字的发展史 套接字起源于20世纪70年代 加利福尼亚 大学伯克利分校版本的Unix,即人们所说的BSD Unix。因此,有时人们也把套接字称为“伯克利套接字”或“BSD套接字”。一开始,套接字被设计用在同一台主机上多个应用程序之间的通讯,这也被称为进程间通讯或IPC。套接字有两种(或者称为有两个种族),分别是基于文件型的和基于网络型的。 基于文件类型的套接字家族:AF_UNIX unix下一切皆文件,基于文件的套接字调用的就是底层的文件系统来获取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信 基于网络类型的套接字家族:AF_INET 还有AF_INET6被用于ipv6,以及一些其他的地址家族

计算法基网络-传输层

允我心安 提交于 2019-11-27 13:02:43
文章目录 UDP 和 TCP 的特点 UDP TCP TCP 的三次握手 三次握手的过程 A最后为什么还要再发一次确认? TCP 的四次挥手 TCP四次挥手的过程 为什么A在TIME-WAIT状态要等待2MSL的时间? 四次挥手的原因 TCP可靠传输的实现 TCP 滑动窗口 超时重传时间选择 选择确认SACK TCP流量控制 流量控制的定义 利用滑动窗口实现流量控制 TCP的传输效率 糊涂窗口综合症: TCP拥塞控制 概念 拥塞控制的四个算法 参考 UDP 和 TCP 的特点 UDP 用户数据报协议 UDP(User Datagram Protocol): 1.是无连接的; 2.尽最大可能交付; 3.面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部); 4.没有拥塞控制; 5.支持一对一、一对多、多对一和多对多的交互通信; 6.UDP的首部开销小。 TCP 传输控制协议 TCP(Transmission Control Protocol)是 1.面向连接的; 2.每一条 TCP 连接只能是点对点的(一对一); 3.提供可靠交付,有流量控制,拥塞控制; 4.提供全双工通信; 5.面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块)。 TCP 的三次握手 三次握手的过程 上图中,A为客户端,B为服务器。 1