TCP协议介绍(传输层)

TCP(Transmisson Control Protocol)、(传输控制协议):是面向连接的、可靠的进程到进程通信协议。TCP提供双工服务,即数据可在同一时间双向传输,每一个TCP都有发送缓存和接受缓存,用来临时存放数据。

TCP报文格式

TCP将若干字节构成一个分组,叫包文段(Sement)
TCP报文段封装在IP数据报中

TCP报文的首部长度20~60个字节、内容如下

**源端口号:**为发送方进程对应的端口好。
**目标端口号:**对应的是接受端的进程,接受端接受到数据段后,根据这个端口号来确定把数据送给那个应用的进程。
序号当TCP从进程接受数据字节时,就把他们存储在发送缓存中,并对每一个字节进行编号。当数据到达目的后,接收端会按照这个序号把数据重新排列,保证数据的正确性。
**确认号:**确认号是对发送端的确认信息,用它来告诉发送端这个序列号之前的数据段都已经收到
**首部长度:**用它可以确定首部数据结构的字节长度。
**保留:**这部分保留位作为今后扩展功能用。
**URG:**紧急指针有效位。
**ACK:**只有当ACK=1时,确认序列号字段才有效;当ACK=0时,确认序列号字段无效
**PSH:**标志位位1时要求接收方尽快将数据段送达应用层。
**RST:**当RST值为1时通知从新建立TCP连接。
**SYN:**同步序列号,TCP需要建立连接时将这个值设为1。
**FIN:**发送端完成发送任务,当TCP完成数据传输需要断开连接时,提出断开连接的一方将这个值设为1。
**窗口值:**说明本地可接收数据端的数目,这个值的大小是可变的
**校验和:**要来做差错控制。若两次的校验和一致,这说明数据基本是正确的,否者将认为数据以损坏,接受端将丢弃数据。
**紧急指针:**和URG配合使用,当URG=1时有效。
**选项:**在TCP首部可以有多达40字节的可选信息。

三次握手

1、第一次握手:客户端给服务器发送一个 SYN 报文。
2、第二次握手:服务器收到 SYN 报文之后,会应答一个 SYN+ACK 报文。
3、第三次握手:客户端收到 SYN+ACK 报文之后,会回应一个 ACK 报文。
4、服务器收到 ACK 报文之后,三次握手建立完成。

为什么三次握手不能两次进行连接?

第一次握手:客户端发送网络包,服务端收到了。
这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。
第二次握手:服务端发包,客户端收到了。
这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。
第三次握手:客户端发包,服务端收到了。
这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。

四次挥手

1、第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于FIN_WAIT1状态。

2、第二次握手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 + 1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT状态。

3、第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。

4、第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 + 1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态

5、服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。

为什么断开连接是四次挥手不是三次挥手?

ack是为了让对方闭嘴。结束,1)A不停的说,我想结束,不再发了。2)B收到后,但是还有数据没处理完,就发ack让A闭嘴。等我处理完再说。3)B终于处理完了,不停对A说,满足你结束吧。4)A
知道B要结束了,给B说,可以闭嘴了,我结束B收到结束,不再发送确认,进入关闭态
网络的可靠性不可预知,当服务端发起第三次挥手,进入 LAST-ACK 后,它需要等一个反馈,即客户端接收到了自己的消息,而不是在传输过程中丢了。这就是需要第四次握手的原因。当然,假设不需要第四次握手,第三次握手后,服务端就直接 CLOSED 了,那这个第三次握手的报文如果客户端没收到, 对于客户端来说,就以为服务端的数据还没传完,就会一直等待在 FIN-WAIT-2 这个阶段。因为第三次握手是服务端发送 FIN报文的。TCP 是一种可靠的传输层协议,这是设计上的原则

如果已经建立链接,但是客户端突然出现了故障应该怎么办?

TCP还设有一个保活计时器Q,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时问通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

UDP协议

UDP是一个无连接、不保证可靠性的传输层协议,也就是说发送端不关心发送的数据是否到达目标主机、数据是否出错。

UDP首部报文格式


**源端口号:**用来标识数据发送端的进程
**目的端口号:**用来标识数据接受端的进程
**UDP长度:**用来指出UDP的总长度,为首部加上数据。
**校验和:**用来完成对UDP数据的差错校验,这是UDP提供的唯一可靠机制。

总结

主要学习了TCP和UDP协议
TCP和UDP报文格式
三次握手四次挥手

传输层中TCP和UDP相关推荐

  1. 传输层的TCP和UDP

    传输层的TCP和UDP TCP和UDP协议 TCP报文段 TCP的三次握手 TCP的四次断开 TCP的常用端口号及其功能 UDP的常用端口号及其功能 TCP和UDP协议 TCP(Transmissio ...

  2. 《UNIX网络编程 卷1:套接字联网API(第3版)》——第2章 传输层:TCP、UDP和SCTP 2.1概述...

    本节书摘来自异步社区<UNIX网络编程 卷1:套接字联网API(第3版)>一书中的第2章,第2.1节,作者:[美]W. Richard Stevens , Bill Fenner , An ...

  3. 4-1:TCP协议之传输层的作用及传输层协议TCP和UDP

    文章目录 一:传输层的定义 二:通信处理 三:传输层协议 四:TCP协议的可靠和性能 一:传输层的定义 前面说过,IP首部有一个协议字段用于标识网络层(IP)的上一层采用哪一种传输层协议.根据这个字段 ...

  4. 传输层协议TCP和UDP

    本文力图简洁,让读者对TCP和UDP有个初步的认知.闲话少说,现在开始吧.TCP和UDP都是传输层的协议.TCP通过三次握手建立可靠连接,对未送达的消息重新进行发送.UDP不建立连接而直接发送,对未送 ...

  5. TCP/IP中的传输层协议TCP、UDP

    TCP提供可靠的通信传输,而UDP则常用于让广播和细节控制交给应用的通信传输. 传输层协议根据IP数据报判断最终的接收端应用程序. TCP/IP的众多应用协议大多以客户端/服务端的形式运行.客户端是请 ...

  6. 网络传输层之TCP、UDP详解

    1.传输层存在的必要性 由于网络层的分组传输是不可靠的,无法了解数据到达终点的时间,无法了解数据未达终点的状态.因此有必要增强网络层提供服务的服务质量. 2.引入传输层的原因 面向连接的传输服务与面向 ...

  7. 传输层协议TCP和UDP的区别详解

    一.TCP协议 1.TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认.窗口.重传.拥塞控制机制,在数据传完后,还会断开连接用来节约系 ...

  8. 传输层协议TCP与UDP的区别

    TCP协议与UDP协议作为传输层最常用的两种传输协议,这两种协议都是使用IP作为网络层协议进行传输.网络层IP与传输层的关系可以简单理解成生活中收快递.IP协议为每个上网的主机分发一个IP地址,这个地 ...

  9. 简单理解TCP/IP传输层协议TCP和UDP

    TCP/IP模型中的传输层主要负责端到端通信,和数据链路层类似,数据链路层负责点到点的通信.TCP/IP模型的传输层主要协议有TCP (Transmission Control Protocol,传输 ...

最新文章

  1. php文件的标准格式化,PHP获取文件大小并格式化的几种方法
  2. python处理信号机制_Python的Flask框架中的signals信号机制
  3. Greenplum【问题记录 01】资源组配置后GPCC用户无法认证登录
  4. linux vbox 添加串口,如何在VirtualBox中直接使用本机物理串口
  5. V.35协议转换器指示灯告警常见故障以及排除方法解析
  6. python sendline_python Pexpect模块的使用
  7. PC版-B站下载视频
  8. 事业单位的到手工资不高,甚至有点低,为什么这么多人去考?
  9. 在Linux中使用GoAccess分析Nginx的日志
  10. matlab高斯滤波跟中值滤波区别,基于MATLAB图像处理的中值滤波、均值滤波以及高斯滤波的实现与对比...
  11. 半导体器件基础与二极管电路
  12. Mac中隐藏/显示文件或文件夹
  13. 网页audio标签中autoplay自动播放音乐失败解决方案
  14. 美团 P2P 图书馆实践:5天时间1845册图书共享入库
  15. BINARY_INTEGER和INTEGER的区别
  16. Stm32MP157-Linux(Ubuntu)——Ubuntu入门
  17. 我擦C++ 反人类啊
  18. matlab语音识别系统(源代码),matlab语音识别系统(源代码)最新版DOC.doc
  19. 2018 shenyang ICPC E - The Kouga Ninja Scrolls
  20. Ubuntu_在Ubuntu 12.04 中安装iTunes

热门文章

  1. Java引用数据类型String详解
  2. C#语言入门详解笔记(9)—P19 委托详解
  3. 华为交换机-关于等保“身份鉴别”的配置
  4. 【详细】CommandLineTools的Apple Developer下载教程
  5. python的itchat获取微信好友数量和性别统计
  6. 《社会心理学》第六章学习笔记
  7. QT中调佣FindWindow返回空值
  8. sc delete mysql_彻底删除MySQL服务 删除服务:sc delete mysql//这里的mysql是你要删除的服务名在...
  9. linux系统改win10指纹用不了,win10系统设置指纹登录提示windows hello在此设备上不可用怎么办...
  10. WPF 实现水珠效果按钮组