tcp四次挥手

TCP三次握手及四次挥手详细图解【转】

微笑、不失礼 提交于 2019-11-26 18:31:21
原文: http://www.cnblogs.com/hnrainll/archive/2011/10/14/2212415.html 相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需要控制这个过程.但是对于理解TCP底层运作机制,相当有帮助. 而且对于有网络协议工程师之类笔试,几乎是必考的内容.企业对这个问题热情之高,出乎我的意料:-)。有时上午面试前强调这个问题,并重复讲一次,下午几乎每一个人都被问到这个问题。 因此在这里详细解释一下这两个过程。 TCP三次握手 所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。 三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手。 第一次握手: 客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。 第二次握手: 服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即X+1。 第三次握手.

网络编程相关知识点

廉价感情. 提交于 2019-11-26 17:25:00
一、网络基础 用途:未来的web框架的学习 未来的工作场景做铺垫 两个运行中的程序如何传递信息? 通过文件 两台机器上的两个运行中的程序如何通信? 通过网络 网络应用开发架构 C/S client 客户端 server 服务端 例如:迅雷 qq 浏览器 飞秋 输入法 百度云 pycharm git VNC 红蜘蛛 各种游戏 B/S browser 浏览器 server 服务端 例如:淘宝 邮箱 各种游戏 百度 博客园 知乎 豆瓣 抽屉 统一程序的入口 B/S和C/S架构的关系:B/S是特殊的C/S架构 网卡 :是一个实际存在在计算机中的硬件 mac地址 :每一块网卡上都有一个全球唯一的mac地址 交换机 :是连接多台机器并帮助通讯的物理设备,只认识mac地址 交换机进行局域网通信 广播:发送给所有机器 单播:发送给一个机器 组播:发送给一组机器 协议 :两台物理设备之间对于要发送的内容,长度,顺序的一些约定 ip地址 ipv4协议 4位的点分十进制 32位2进制表示 0.0.0.0 - 255.255.255.255 ipv6协议 6位的冒分十六进制 128位2进制表示 0:0:0:0:0:0-FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 公网ip:能被所有人访问到ip地址 为什么你的外地朋友的电脑我们访问不了? 每一个ip地址要想被所有人访问到

TCP中的“三次握手”和“四次挥手”(简解)

纵饮孤独 提交于 2019-11-26 17:08:46
1、三次握手 (1)首先客户端发送连接请求报文,服务器端接受连接后回复ACK报文,并且这次连接分配资源。客户端接收ACK报文也向服务器端发送ACK报文,并分配资源,这样TCP连接就建立了。 2.四次挥手 假设客户端发起中断连接请求,也就是发送FIN报文。服务器端接到FIN报文后,意思是说"我客户端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,“告诉客户端,你的请求我收到了,但是我还没准备好,请继续你等我的消息”。这个时候客户端就进入FIN_WAIT状态,继续等待服务器端的FIN报文。当服务器端确定数据已发送完成,则向客户端发送FIN报文,告诉客户端,“好了,我这边数据发完了,准备好关闭连接了"。客户端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕服务器端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果服务器端没有收到ACK则可以重传。“,服务器端收到ACK后,“就知道可以断开连接了”。客户端等待了2MSL后依然没有收到回复,则证明客户端已正常关闭,那好,我客户端也可以关闭连接了。Ok,TCP连接就这样关闭了! 来源: https://blog.csdn.net/cm4002/article/details/98966518

计算机网络学习之运输层

瘦欲@ 提交于 2019-11-26 17:08:29
谢希仁老师的计算机网络学习(第六版),主要是记录下TCP/UDP。 首先记录一些需要复习的概念: (1)运输层是应用层下面的一个层,它提供的是应用进程之间的逻辑通信,和下面几个层是主机间逻辑通信不同,同理,运输层也并不是在两个运输层之间直接传送数据。运输层也是对应用层屏蔽了下面的网络细节的,使得应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。 (2)运输层有两个主要的协议:TCP/UDP(传输控制协议/用户数据报协议)。它们都具有复用和分用,以及检错的功能,运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的,只提供最大努力服务,但是这种逻辑通信信道就相当于一条全双工通信的可靠信道,但是采用面向报文的无连接的UDP协议时,这种逻辑通信信道依然是不可靠的信道。 (3)运输层用一个16位的端口号来标志一个端口。端口号只是具有本地意义,它只是为了标志本计算机应用层中的各个进程和运输层进行交互时的层间接口,在不同的计算机中,相同的端口号无关联。 (4)两个主机要进行通信,不仅要知道对方的IP地址,而且还要知道对方的端口号,分别对应的就是对方的主机和对方主机内的应用进程。 (5)UDP的主要特点是:a、无连接。b、尽最大努力交付。c、面向报文。d、无拥塞控制。e、支持一对一、一对多、多对一和多对多交互通信。f、首部开销小,只有四个字段:源端口、目的端口、长度

TCP和UDP

狂风中的少年 提交于 2019-11-26 17:04:55
TCP首部 源端口和目的端口:各占两个字节,加上IP首部的源IP地址和目的IP地址可以唯一确定一个TCP连接。 数据序号:TCP面向字节流传输,表示这个报文段中第一个数据字节序号。4字节 确认序号:仅当ACK标志位为1的时候有效。确认序号代表期望收到的下一个字节的序号。4字节 偏移:头部长度,4位。和IP头部一样,以4字节为单位,最大为60字节。 保留位:6位,必须是0 6个标志位:U(紧急指针有效) A(确认序号有效) P(接收方应尽快将这个报文交给应用层) R(连接重置) S(同步需要用来发起一个链接) F(终止一个连接) 窗口字段:16位,代表的是窗口的字节容量。也就是TCP的标准窗口大小最大为2^16-1=65535字节。 校验和:发送方对于数据内容计算的一个数值,接收方要与发送方数值结果完全一样,从而证明数据有效性。检验和覆盖了整个的TCP报文段;这是一个强制性的字段,一定是由发送端计算和存储,并由接收端进行验证。 紧急指针:是一个正偏移量,与序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。 选项与填充(必须为4字节整数倍,不够补0):最常见的可选字段的最长报文大小MSS(Maximum Segment Size),每个连接方通常都在一个报文段中指明这个选项。它指明本端所能接收的最大长度的报文段。该选项如果不设置

dsad

三世轮回 提交于 2019-11-26 17:03:10
目录 1 1 网络编程大体图 TCP协议 1 [doc] 1 网络编程大体图 TCP协议 TCP协议又叫:流失协议、可靠协议 1.TCP协议像流水一样一直发送,一直接收 2.TCP协议可靠的原因:有反馈机制(发送一句,回复一句才会发送下一句) 洪水攻击:同一时间发送给服务器大量请求 三次握手,四次挥手: 图: 图: 代码: def print # dasdsad 来源: https://www.cnblogs.com/guyouyin123/p/11328115.html

深度好文|TCP连接的状态详解以及故障排查,技术人员必备技能

限于喜欢 提交于 2019-11-26 16:42:48
我们通过了解TCP各个状态,可以排除和定位网络或系统故障时大有帮助。 1、TCP状态 了解TCP之前,先了解几个命令: linux查看tcp的状态命令 : 1) netstat -nat #查看TCP各个状态的数量 2)lsof -i:port #可以检测到打开套接字的状况 3) sar -n SOCK #查看tcp创建的连接数 4) tcpdump -iany tcp port 9000 #对tcp端口为9000的进行抓包 网络测试常用命令; 1.ping:检测网络连接的正常与否,主要是测试延时、抖动、丢包率。 但是很多服务器为了防止攻击,一般会关闭对ping的响应。所以ping一般作为测试连通性使用。 ping命令后,会接收到对方发送的回馈信息,其中记录着对方的IP地址和TTL。TTL是该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。 TTL是IPv4包头的一个8 bit字段。例如IP包在服务器中发送前设置的TTL是64,你使用ping命令后,得到服务器反馈的信息,其中的TTL为56,说明途中一共经过了8道路由器的转发,每经过一个路由,TTL减1。 2.traceroute:raceroute 跟踪数据包到达网络主机所经过的路由工具 traceroute hostname 3.pathping:是一个路由跟踪工具,它将 ping 和 tracert

TCP协议简介及其三次握手与四次挥手

会有一股神秘感。 提交于 2019-11-26 16:15:45
本篇博文是对参考文章的学习总结 一、TCP介绍 tcp协议之所以设计复杂,可以说它秉承的是“性恶论”。它认为网络环境天生就是恶劣的, 丢包、乱序、重传、拥塞 都是常有的事,一言不合就可能送达不了,所以只能从算法层面上来保证传输的可靠性。 TCP包头格式 其中源端口号和目的端口号是用来确定数据应该发往哪个应用层中的进程。 序号是用来解决乱序的问题。 确认序号用来确认发出去的包对方是否接收成功,不管有没有成功都应该有个回复,可以解决丢包问题,如果对方没有接收成功,则继续发送。T CP 是靠谱的协议,但是这不能说明它面临的网络环境好 。从ip层来说,网络环境是复杂多变的,没有什么可靠性而言,而 tcp所能做的就是尽最大努力交付,通过各种算法保证 。如果丢包就重传,保证在tcp层面上努力保证可靠性。 其中的状态位用来维持状态连接,因为TCP是面向连接的,所以根据状态位的变化,来维持连接状态。ACK表示回复,SYN代表建立一个连接,RST表示拒绝连接,FIN表示结束连接。 窗口大小用来进行流量控制的,通信双方需要各自建立一个流量窗口,标识当前自己的处理能力,避免发送太快与太慢。 流量控制主要针对的是通信双方。 在保证流量控制的同时,针对网络环境的变化,还需要一定的拥塞避免处理能力, 当网络环境拥堵时,就需要调整自己的发送速度来适应网络环境。拥塞避免主要针对的是网络环境。 二、TCP三次握手

TCP 和 UDP 的区别

萝らか妹 提交于 2019-11-26 15:50:23
文章目录 前言 1. UDP 2. TCP 2.1 TCP 的三次握手 2.2 TCP 四次挥手 2.3 累计确认 2.4 顺序问题和丢包问题 2.5 流量控制的问题 2.6 拥塞控制的问题 总结及面试问题 前言 前端的面试中经常问的 TCP 和 UDP 的区别,网上也有好多内容,比如 TCP 和 UDP 的区别 TCP 是面向连接的,UDP 是面向无连接的 UDP程序结构较简单 TCP 是面向字节流的,UDP 是基于数据报的 TCP 保证数据正确性,UDP 可能丢包 TCP 保证数据顺序,UDP 不保证 之前也因为面试的原因了解过一下,但是面试官又问了为什么 TCP 是可靠传输,一下就露馅了,说不出来了,然后这两天就仔细了解了一下这方面的内容,还专门订阅了极客时间的趣谈网络协议,因此,这篇文章主要基于趣谈网络协议和自己的理解。 1. UDP 要想理解 TCP 和 UDP 的区别,首先要明白什么是 TCP,什么是 UDP TCP 和 UDP 是传输层的两个协议 我们来看一下 UDP 的包头 由上图可以看出,UDP 除了端口号,基本啥都没有了。如果没有这两个端口号,数据就不知道该发给哪个应用。 所以 UDP 就像一个小孩子,特别简单,有如下三个特点 UDP 的特点 沟通简单,不需要大量的数据结构,处理逻辑和包头字段 轻信他人。它不会建立连接,但是会监听这个地方,谁都可以传给它数据

TCP三次握手和四次挥手

99封情书 提交于 2019-11-26 14:51:45
三次握手: 目的: 建立可靠的通信,确保双方发送和接收功能是正常的。 流程: 发送方向接收方发送SYN信号,接收方(已确认发送方发送功能正常)收到信号后并向发送方发送SYN/ACK信号,发送方收到SYN/ACK信号后(发送方已确认接收方发送和接收正常),再向接收方发送ACK信号(最后接收方确认发送方接收正常)。 SYN/ACK: SNY的来回传输成功则表示发送方(谁发出SYN即是发送方)到接收方的信道可靠,ACK的来回传输是为了进一步确认信道无误。 四次挥手: 目的: 在数据传输结束后,双方通过四次挥手的流程结束TCP链接。 流程: 客户端发送数据结束后,向服务端发送一个FIN信号(用来关闭客户端到服务端的数据传输),服务端返回一个ACK信号进行回应确认(客户端已关闭到服务端的数据传输);服务端向客户端发送一个FIN信号(用来关闭服务端到客户端的数据传输),客户端返回一个ACK信号进行确认(服务端已关闭到客户端的数据传输)。 来源: https://www.cnblogs.com/chengxiaodi/p/11324623.html