TCP协议大全

5 篇文章 0 订阅
订阅专栏

Date: 2017-01-02 10:10:11

TCP协议笔记

上一篇文章已经讲过啦TCP/IP协议族了,大概多TCP协议有了大概的了解。
在网页中HTTP请求获取内容之前是需要先建立TCP连接的,而TCP建立连接需要三次握手,该篇文章将讲解TCP的工作原理。

TCP特性

  • TCP提供一种面向连接的、可靠的字节流服务
  • 在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP
  • TCP使用校验和,确认和重传机制来保证可靠传输
  • TCP给数据分节进行排序,并使用累积确认保证数据的顺序不变和非重复
  • TCP使用滑动窗口机制来实现流量控制,通过动态改变窗口的大小进行拥塞控制

注意:TCP 并不能保证数据一定会被对方接收到,因为这是不可能的。TCP 能够做到的是,如果有可能,就把数据递送到接收方,否则就(通过放弃重传并且中断连接这一手段)通知用户。因此准确说 TCP 也不是 100% 可靠的协议,它所能提供的是数据的可靠递送或故障的可靠通知。

TCP三次握手连接

所谓三次握手(Three-way Handshake),是指建立一个 TCP 连接时,需要客户端和服务器总共发送3个包。
三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号,交换 TCP 窗口大小信息。在 socket 编程中,客户端执行 connect() 时。将触发三次握手。

  1. 客户端向服务器发送SYN报文(Seq=x, SYN=1),客户端进去SYN_SENT状态
  2. 服务器收到客户端的请求,向客户端回复一个确认信息(Ack = x + 1)和 一个SYN包(seq=y)建立连接请求,此时服务器进去SYN_RECV状态
  3. 客户端收到服务器的回复(SYN+ACK报文),向服务器端发送ACK,此包发送完毕后客户端和服务器端进入ESTABLISHED状态

先看一下TCP的头部

第一次握手

第二次握手

第三次握手

为什么要三次握手而不是二次

重点:主要目的防止server端一直等待,浪费资源

  1. 三次握手的目的是同步连接双方的序列号和确认号并交换TCP窗口大小信息。
  2. 两次握手可能因为丢包而出现死锁。

客户端C发送请求,服务端S应答并分配资源(资源:由于不需要再次确认,这个时候服务端就会返回http请求的结果)。
若S的应答没有到达C端,C认为连接未建立,而S认为建立了,S会在一段时间内保留分配的资源
如果大量C这样请求,S会崩溃。

注意:TCP握手之后,服务端接下来是要返回客户端的请求资源哦。如果在两次握手中,客户端不断的请求,就会导致服务端大量资源的量费。

TCP四次挥手断开

  1. 客户端A发送位码为FIN=1,用来关闭客户A到服务器B的数据传送。此时A的状态为FIN_WAIT_1
  2. 服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。此时A为FIN_WAIT_2,B为CLOSE_WAIT
  3. 服务器B关闭与客户端A的连接,发送一个FIN给客户端A。此时A为TIME_WAIT,B为LAST_ACK
  4. 客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。此时A、B都关闭了,状态变为CLOSED。
    说明:关闭分为两部分,客户端发器关闭,服务端响应;服务端发器关闭,客户端响应。

注意: 2,3阶段可以一起发送哦,如果2,3阶段一起发送,客户端A直接进入到TIME_WAIT状态,无须进入FIN_WAIT_2。
2,3阶段分别发送的是ACK,FIN,如果服务端还有未传输完毕的数据就单独发送一个ACK应答客户端发送过来的FIN;等待传送完毕再发送一个FIN告诉客户段A服务端B也可以断开连接了。但是如果服务端在接受到客户端A的FIN时,已经传送完毕数据了,那就可以ACK,FIN一起发送了,没必要让客户端A进入FIN_WAIT2等候了。参考文献

图中有个TIME_WAIT是干什么的?
持续时间未2MSL,一个数据包在网络中的最长生存时间为MSL 。 假设最后客户端回复的ACK丢失,服务器端会在超时时间到来时,重传最后一个FIN包。
ACK和FIN在网络中的最长生存时间就为2MSL,这样就可以可靠的断开TCP的双向连接。

MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。RFC 793中规定MSL为2分钟,实际应用中常用的是30秒,1分钟和2分钟等。

为什么建立连接需要三次握手,而断开连接需要四次握手

为什么需要三次握手?
为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。(和上面的例子差不多,两种不同的场景,都是客户端收不到或者不需要的情况下服务端还发送资源)

为什么需要四次连接断开?
因为客户端和服务端都需要一个FIN和ACK,当客户端发送了FIN包之后,处于半关闭状态,此时仍然可以接收数据包。
在断开连接时,如果服务端收到FIN包,但此时仍有数据未发送完,此时就需要先向客户端回复ACK,告诉客户端我已经收到你的请求了。等到将剩下的数据都发送完之后,再向客户端发送FIN,断开发送方向的连接,因此很多时候FIN和ACK需要在两个数据包中发送,因此需要四次握手。

超时重传和快速重传

超时重传:当超时时间到达时,发送方还未收到对端的ACK确认,就重传该数据包。
快速重传:当后面的序号先到达,如接收方接收到了1、 3、 4,而2没有收到,接收方就会立即向发送方重复发送三次ACK=2的确认请求重传。如果发送方连续收到3个相同序号的ACK,就重传该数据包,而不用等待超时。

TCP之SYN攻击

在三次握手过程中,服务器发送 SYN-ACK 之后,收到客户端的 ACK 之前的 TCP 连接称为半连接(half-open connect)。此时服务器处于 SYN_RCVD 状态。当收到 ACK 后,服务器才能转入 ESTABLISHED 状态.

SYN 攻击指的是,攻击客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户的确认。由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,导致目标系统运行缓慢,严重者会引起网络堵塞甚至系统瘫痪。SYN 攻击是一种典型的 DoS/DDoS 攻击。

在 Linux/Unix 上可以使用系统自带的 netstats 命令来检测 SYN 攻击。

防范措施:
1、降低SYN timeout时间,使得主机尽快释放半连接的占用
2、采用SYN cookie设置,如果短时间内连续收到某个IP的重复SYN请求,则认为受到了该IP的攻击,丢弃来自该IP的后续请求报文
3、在网关处设置过滤,拒绝将一个源IP地址不属于其来源子网的包进行更远的路由

TCP与UDP的区别

  • TCP是有连接的,两台主机在进行数据交互之前必须先通过三次握手建立连接;而UDP是无连接的,没有建立连接这个过程
  • TCP是可靠的传输,TCP协议通过确认和重传机制来保证数据传输的可靠性;而UDP是不可靠的传输
  • TCP还提供了拥塞控制、滑动窗口等机制来保证传输的质量,而UDP都没有
  • TCP是基于字节流的,将数据看做无结构的字节流进行传输,当应用程序交给TCP的数据长度太长,超过MSS时,TCP就会对数据进行分段,因此TCP的数据是无边界的;而UDP是面向报文的,无论应用程序交给UDP层多长的报文,UDP都不会对数据报进行任何拆分等处理,因此UDP保留了应用层数据的边界

基于TCP协议与UDP协议

  • TCP: FTP、HTTP、Telnet、SMTP、POP3、HTTPS
  • UDP:DNS、SNMP、NFS

TCP窗口滑动以及拥塞控制

TCP协议在工作时,如果发送端的TCP协议软件每传输一个数据分组后,必须等待接收端的确认才能够发送下一个分组,由于网络传输的时延,将有大量时间被用于等待确认,导致传输效率低下。为此TCP在进行数据传输时使用了滑动窗口机制。
TCP滑动窗口用来暂存两台计算机间要传送的数据分组。每台运行TCP协议的计算机有两个滑动窗口:一个用于数据发送,另一个用于数据接收。发送端待发数据分组在缓冲区排队等待送出。被滑动窗口框入的分组,是可以在未收到接收确认的情况下多送出的部分。滑动窗口左端标志X的分组,是已经被接收端确认收到的分组。随着新的确认到来,窗口不断向右滑动。
TCP协议软件依靠滑动窗口机制解决传输效率流量控制问题。

这部分没法模拟,所以只能复制粘贴。 详情查看解说

参考文章

https://hit-alibaba.github.io/interview/basic/network/TCP.html
http://blog.csdn.net/u012658346/article/details/51192944
http://www.cnblogs.com/wulala1119/p/4749892.html
http://blog.csdn.net/longwang155069/article/details/50058779

modbus tcp协议解析
04-08
Modbus TCP协议是一种广泛应用于工业自动化领域的通信协议,它基于标准的TCP/IP协议栈,使得设备能够通过以太网进行数据交换。这个协议允许不同制造商的设备之间进行简单且有效的通信,大大增强了系统的互操作性。 ...
TCP/IP体系结构常用协议总结
weixin_41657954的博客
01-27 1万+
TCP/IP体系结构常用协议总结 文章目录TCP/IP体系结构常用协议总结1.简介2.协议2.1应用层协议2.1.1POP3协议2.1.2FTP协议2.1.3HTTP协议2.1.4TeInet协议2.1.5SMTP协议2.1.6Samba协议2.1.7CIFS协议2.1.8DHCP协议2.1.9TFTP协议2.1.10SNMP协议2.1.11DNS协议2.2传输层协议2.2.1TCP协议2.2.2UDP协议2.3网络层协议2.3.1IP协议2.3.2ICMP协议2.3.3IGMP协议2.3.4ARP协议2.
TCP/IP 应用层常用协议
Java+GO+JS全栈工程师-鹤冲天的博客:编程辅导~商务合作~技术交流
01-03 1万+
TCP/IP协议是一种能够在多个不同网络间实现信息传输的协议簇,其中应用层的主要协议有Telnet、FTP、SMTP、HTTP等,是用来接收来自传输层的数据或者按不同应用要求与方式将数据传输至传输层。
【网络协议基础】TCP/IP协议大全
最新发布
good good study day day up
07-30 1314
TCP/IP协议是现代计算机网络通信的基础,是互联网及局域网广泛使用的一套协议TCP/IP协议集采用分层模型,以便于网络的设计、实现和管理。
TCP协议详解 (史上最全)
热门推荐
chentiebo的博客
04-28 3万+
网络拓扑图吧,请做好。
基于TCP和UDP的常见协议
Edidaughter的博客
05-12 9688
基于TCP或UDP的应用层协议
应用层常见的协议及对应的端口号
04-10 3万+
TCP/IP模型中,应用层是最高层。应用层包括所有的高层协议,并且不断有新的协议加入。TCP/IP参考模型中应用层和下层协议之间的关系如下:应用层的许多协议都是基于(C/S client /server)方式的。下面为我们就图片上的应用层协议来进行下简单的介绍: 基于TCP协议的都用C/S方式: **** 一:TELNET (远程登录)
TCP协议实验1
08-03
TCP协议实验1】实验旨在帮助学生深入理解TCP协议的工作原理,掌握其连接状态控制、可靠传输机制,并涉及拥塞控制算法。实验的核心是实现TCP协议的状态机,特别是客户端的“停-等”模式,以及Socket接口的编程。TCP...
tcp协议分析
03-19
tcp协议
基恩士上位机TCP通讯协议
11-07
与PLC进行通信是工业自动化系统中一个非常关键的部分,基恩士提供了TCP/IP通讯协议来实现上位机与PLC之间的直接通信。 在上位机与基恩士PLC进行TCP通讯时,首先需要确保通信协议的支持。KV系列的PLC支持多种通讯...
基于TCP协议网上聊天程序
12-01
本次计算机网络课程设计是基于TCP协议网上聊天程序,程序中用到了套接字socket、多线程thread和Python自带的图形界面库Tkinter,在密码保存和传递方面用到了MD5算法,该程序的功能:用户注册、用户登录、显示在线...
计算机网络
jalyy的博客
09-17 286
以太网报头长度:14字节 ip数据报头长度:20字节 tcp数据报头长度:20字节 udp数据报头的长度:8字节 ipv4:4个字节 MAC:6个字节 ipv6:16个字节
TCP/IP应用层常见协议总结
大河之犬的博客
01-19 5520
Telnet 协议的最大缺点之一是所有数据(包括用户名和密码)均以明文形式发送,这有潜在的安全风险。这就是为什么如今很少使用Telnet并被一种称为SSH的非常安全的协议所取代的主要原因。目前使用的 HTTP 协议大部分都是 1.1。当我们使用浏览器浏览网页的时候,我们网页就是通过 HTTP 请求进行加载的,整个过程如下图所示。另外, HTTP 协议是”无状态”的协议,它无法记录客户端用户的状态,一般我们都是通过 Session 来记录客户端用户的状态。的,这样的话建立的连接就可以在多次请求中被复用了。
使用TCP协议有哪些?使用UDP的协议有哪些?
Y先森0.0
06-13 1万+
使用TCP协议有哪些?使用UDP的协议有哪些? 运行于TCP协议之上的协议: HTTP协议:超文本传输协议,用于普通浏览 HTTPS协议:安全超文本传输协议,身披SSL外衣的HTTP协议 FTP协议:文件传输协议,用于文件传输 POP3协议:邮局协议,收邮件使用 SMTP协议:简单邮件传输协议,用来发送电子邮件 Telent协议:远程...
TCP通信协议
qq_20312079的博客
01-17 2867
分片不同TCP 的数据大小如果大于 MSS 大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装 TCP 数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片UDP 的数据大小如果大于 MTU 大小,则会在 IP 层进行分片,目标主机收到后,在 IP 层组装完数据,接着再传给传输层,但是如果中途丢了一个分片,则就需要重传所有的数据包,这样传输效率非常差,所以通常 UDP 的报文应该小于 MTU。所以当服务端出现大量 TIME_WAIT 时,系统资源被占满时,会导致处理不过来新的连接。
OSI七层模型与TCP/IP五层模型
dianjieting8509的博客
12-25 716
一、OSI参考模型 1、OSI的来源 OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。 ISO为了更好的使网络应用更为普及,推出了OSI参考模型。其含义就是推荐所有公司使用这个规范来控制网络。这样所有公司都有相同的规范,就能互联了。...
基于TCP/UDP的应用层协议
清江蓑笠翁的博客
05-21 1万+
1,基于TCP的有: Telnet(Teletype over the Network, 网络电传) ,通过一个终端(terminal)登陆到网络 FTP(File Transfer Protocol, 文件传输协议) ,由名知义 SMTP(Simple Mail Transfer Protocol,简单邮件传输协议) ,用来发送电子邮件 POP3(Post Office Protocol...
基于TCP协议开发文件传输系统一
玖玖玖
03-15 1554
简介:基于TCP协议开发文件传输系统,搭建多进程网络服务程序框架,实现TCP长连接心跳机制、文件上传与下载、异步通信实现快速传输。
面试题:TCP 和 UDP 分别对应的常见应用层协议有哪些?
jakelihua
06-14 2418
SNMP(Simple Network Management Protocol):SNMP 主要用于管理和监测网络设备等,它工作在 UDP 端口号为 161 和 162 的基础上,在 SHDN之上开展添加额外的安全功能来强化安全控制。HTTPS(Hyper Text Transfer Protocol Secure):HTTPS 类似于 HTTP 协议,但使用安全套接字层协议(SSL/TLS)对数据进行加密,从而保护数据的安全性。TCP 是一种面向连接的协议,通常用于数据传输至关重要的应用程序。
Modbus TCP协议详解与应用
Modbus TCP协议是一种广泛应用于工业自动化领域的通讯协议,它基于标准的TCP/IP协议栈,并结合了Modbus协议的简单和高效特性,使得不同设备之间能够进行客户机/服务器(Client/Server)通信。该协议允许PLC(可编程...
写文章

热门文章

  • Spring-事务的传播属性(六) 19378
  • redis实战全面讲解 14344
  • zookeeper实战全面讲解(一) 12366
  • top命令查看服务器性能 7383
  • 关于多线程中的面试题 7331

分类专栏

  • 常见bug
  • java 1篇
  • jvm 11篇
  • Java多线程全面解刨 27篇
  • Java集合源码分析 8篇
  • 分布式 7篇
  • rabbitmq 3篇
  • spring 8篇
  • mysql 1篇
  • 算法 5篇
  • java基础 5篇
  • redis 3篇
  • Linux 2篇
  • shell 1篇
  • tomcat 1篇

最新评论

  • RabbitMq集群之高可用(二)

    gpj331204181: 虚拟ip切换的时候,程序正在向队列中发消息,这时候会招致部分数据丢失,怎么处理?

  • jvm-内存管理机制(一)

    琛羽千遇: 这篇文章问题很多...

  • jvm-内存管理机制(一)

    琛羽千遇: 对象无法调用静态方法???

最新文章

  • java并发队列之SynchronousQueue(六)
  • java并发队列之总结(八)
  • java并发队列之非阻塞队列ConcurrentLinkedQueue(七)
2018年77篇
2016年21篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司如何把网站百度优化宝安网站seo优化系统肇庆网站优化代理如何搜索优化网站网站自然优化排名广州网站首页关键词优化方法汉川优化企业网站排名网站的优化去联火30星棒南宁网站优化步骤长沙网站优化包括什么网站分类优化企业网站制作优化高端商务网站优化哪里有网站建设流程优化案例合肥seo网站优化高安网站优化排名都匀分类网站优化图片网站优化方法佛山首页网站关键词优化方法大兴网站优化排名公司企业SEO网站优化设计网站优化推广多少钱推广优化网站济南网站seo优化代理沛县网站推广优化桂园网站优化及营销方案唐山网站优化快速排名广州家居网站seo优化浙江网站推广优化代理网站优化工歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化