一、TCP的特点

  • 面向连接的、可靠的、基于字节流的传输层通信协议。
  • 将应用层的分割成报文段,并发送发给目标节点的TCP层。
  • 数据包都有序号,对方收到则发送ACK确认,未收到则重传。
  • 使用效验和来效验数据在传输过程中是否有误。

二、TCP报文信息

  报文头包含信息有:

  • 源端口、目的端口
  • 标示进程(socket):IP地址+协议+端口号

  TCP的flags标志:

  1. URC:urgent,紧急指针,为1时有效;
  2. ACK:确认序列号标志;
  3. PSH:push标志,数据不进入缓存区,直接交给应用程序;
  4. RST:重置连接标志;
  5. SYN:同步序列号,用于建立连接过程;
  6. FIN:finish标志,用于释放连接。

三、TCP的三次握手

流程图如下(自己画的呦~ 推荐工具:在线网址ProcessOn):

TCP三次握手流程图详细说明:

  1. 建立连接时,客户端发送SYN包(seq=x)到服务端,并进入SYN-SEND状态,等待服务器确认。
  2. 服务器收到SYN包,必须确认客户端的SYN(ack=x+1),同时,自己也发送一个SYN包(seq=y),即SYN+ACK包,此时,服务器进入SYN-RECV状态。
  3. 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户和服务器进入ESTABKISHED状态。开始数据传输。

四、TCP的四次挥手

TCP四次挥手流程图详细说明:

  1. client发送一个FIN后,用来关闭client到service的数据传输,client进入FIN-WAIT-1状态。
  2. service收到FIN后,发送一个ACK给client,确认序号为收到的seq+1(与SYN相同,一个FIN占用一个序号),service进入CLOSED-WAIT。
  3. service发送一个FIN,用来关闭service到client的数据传输,service进入LAST-ACK状态。
  4. client收到FIN后,client进入TIME-WAIT状态,接着发送一个ACK给service,确认序号为收到的序号+1。service进入CLOSED状态,完成四次挥手。

五、TCP的滑动窗口

作用:① 保证TCP的可靠性;

   ②保证TCP的流控制特性(数据顺序发送)。

六、UDP的特点

  • 面向非连接的
  • 不维护连接状态,支持同时想多个客户端传输相同的消息
  • 数据包报文头只有8个字节,额外开较少
  • 吞吐量只受限于数据生成速率、传输速率及机器性能
  • 尽最大努力交互,不保证可靠交付,不维持连接状态表
  • 面向报文,不对应用程序提交的报文进行拆分和合并

七、TCP和UDP的区别

  • 面向连接/无连接
  • 可靠/不可靠
  • 报文有序/无序
  • 速度
  • 量级

最新文章

  1. PL/SQL Developer不配置TNS直接登录
  2. elk系列4之kibana图形化操作
  3. Unity粒子系统特性
  4. 23 使用环境 UsageEnvironment——Live555源码阅读
  5. ruby -- 进阶学习(十七)应用代码优化
  6. [Java,MVC] Eclipse下搭建Spring MVC
  7. Python开发【第一篇】Python模块中特殊变量
  8. 解析Xml四种方法
  9. java工程开发之图形化界面之(第一课)
  10. java线程池ThreadPoolExector源码分析
  11. tcptump的使用------使用JAVA与tcpdump从网络获取原始数据
  12. MSIL实用指南-生成if...else...语句
  13. day03 文件操作
  14. Excel 2016 密码保护破解
  15. flask将日志写入日志文件
  16. Explorer Bo (思维 + 树链剖分)
  17. 构建Jenkins自动化编译管理环境
  18. ViewPager的addOnPageChangeListener和setOnPageChangeListener的区别,ViewPager改变数据后IndexOutOfBoundsException
  19. python中类变量和成员变量、局部变量总结
  20. cocos2d-x学习记录4——图形绘制

热门文章

  1. 每秒100W请求,12306秒杀业务,架构如何优化?
  2. 纸壳CMS现已支持自定义扩展字段
  3. PyCharm设置完自动上传,却不会自动上传任何内容
  4. 《Linux/UNIX系统编程手册》第56章 SOCKET:介绍
  5. Java使用FeignClient发送HTTP 请求
  6. 【西北师大-2108Java】期中成绩汇总
  7. Django3.0 前瞻 支持异步通信
  8. 17-REST framework-Request与Response
  9. Python之基本运算符
  10. JMS入门Demo