tcp协议连接的建立和释放

  • 一、tcp协议
    • (1)tcp的头部结构
    • (2)tcp的三次握手(重点)
    • (3)tcp的四次挥手(重点)
    • (4)tcp的状态转移图
    • (5)tcp可靠性的体现
  • 二、UDP协议
    • (1)特点
    • (2)要注意的问题
  • 三、TCP协议和UDP协议的区别

一、tcp协议

TCP/IP(传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。

(1)tcp的头部结构

  • 16位端口号:告知主机该报文是来自哪里,以及传给哪个上层协议或者应用程序(目的端口)。
  • 32位序列号:一次TCP通信(从连接建立到断开)过程中某一个传输方向上的字节流的每个字节的编号。
  • 32位确认号:用作对另一方发送来的TCP报文段的响应。其值是收到TCP报文段的序号加1。
  • 4位头部长度(header length):标识该TCP头部有多少个32bit字(4字节)。因为4位最大能表示15,所以 TCP头部最长是60字节。
  • 6位标志位包含如下几项:
    URG标志,表示紧急指针(urgent pointer)是否有效。
    ACK标志,表示确认号是否有效。我们称携带ACK标志的TCP报文段为确认报文段。
    PSH标志,提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。
    RST标志,表示要求对方重新建立连接。我们称携带RST标志的TCP报文段为复位报文段。
    SYN标志,表示请求建立一个连接。我们称携带SYN标志的TCP报文段为同步报文段。
    FIN标志,表示通知对方本端要关闭连接了。我们称携带FIN标志的TCP 报文段为结束报文段。
  • 16位窗口大小( window size):是TCP流量控制的一个手段。这里说的窗口,指的是接收通告窗口(Receiver Window,RWND)。它告诉对方本端的TCP接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度。
  • 16位校验和(TCP checksum):由发送端填充,接收端对TCP报文段执行CRC算法以检验TCP报文段在传输过程中是否损坏。注意,这个校验不仅包括TCP头部,也包括数据部分。这也是TCP可靠传输的一个重要保障。
  • 16位紧急指针(urgent pointer):是一个正的偏移量。它和序号字段的值相加表示最后一个紧急数据的下一字节的序号。因此,确切地说,这个字段是紧急指针相对当前序号的偏移,不妨称之为紧急偏移。TCP的紧急指针是发送端向接收端发送紧急数据的方法。我们将在后面讨论TCP紧急数据。
  • 16位紧急指针(紧急指针):是一个正的偏移量。它和序号字段的值相加表示最后一个紧急数据的下一字节的序号.因此,确切地说,这个字段是紧急指针相对当前序号的偏移,不妨称之为紧急偏移.Tcp的紧急指针是发送端向接收端发送紧急数据的方法.我们将在后面讨论tcp紧急数据.

(2)tcp的三次握手(重点)

  • tcp服务端运行以后会处于监听(listen)状态。
  • 建立连接时,客户端发送SYN包(SYN=i)到服务器,并进入到SYN-SEND状态,等待服务器确认。
  • 服务器收到客户端的SYN包,自己也给客户端发送自己的SYN包,并且对客户端的SYN进行确认(ack=i+1),表示自己收到了,此时服务器进入SYN-RECV状态。
  • 客户端收到服务器的SYN+ACK包,向服务器发送确认报ACK(ack=k+1),此包发送完毕客户端进入ESTABLISHED状态,服务端收到确认信息之后进入ESTABLISHED状态,三次握手完成。

由程序看过程:

(3)tcp的四次挥手(重点)


假如客户端先要关闭链接

  • 客户端要断开连接时,向服务端发送FIN报文,自己进入FIN_WAIT_1状态。
  • 服务器收到FIN报文之后,发送确认信息ack,进入CLOSE_WAIT状态。
  • 客户端收到服务器的确认信息之后,自己进入FIN_WAIT_2状态(一发一收结束)。
  • 过一段时间之后服务器端发送FIN报文,进入LAST_ACK状态。
  • 客户端收到服务器的FIN报文之后,发送确认信息,然后进入TIME_WAIT状态。
  • 服务端收到确认ack之后,关闭程序。(四次挥手结束)

从程序看结果:

四次挥手也可以演变成三次挥手(两端同时结束时)。

(4)tcp的状态转移图


在进行四次挥手的过程中,先关闭的一方会进入TIME_WAIT状态。状态可以持续大约两个报文的时间,时间段内在次启用次端口号将不成功。
原因:

  • [1] 在发送最后一次ack时,不能保证一定会发送成功,如果在发送时不成功将一直发送。这是可靠的终止TCP连接。
  • [2]保证让迟来的TCP报文段有足够的时间被识别并丢弃。所有因为网络卡顿的报文会发送过来,网络干净,下次重新启动时不会收到上一次发送的数据。

(5)tcp可靠性的体现

TCP报文有三个机制:应答确认、超时重传、滑动窗口。

  • 应答确认:当服务端给客户端从缓冲区发送信息之后必须要客户端回复确认信息才能将数据从缓冲区删除,如果对方没收到,或者收到了并且发送了确认信息,但是确认信息丢失,服务端都认为是数据发送失败,不会将信息从缓冲区删除。
  • 超时重传:当服务端给客户端发送数据失败或者客户端收到数据并且发送确认信息,但是确认信息丢失,这两种情况下,服务端都认为发送数据失败,在一定的时间内将数据重新发送。
  • 去重和乱序重拍:有了应答确认和超时重传机制就会有一定的问题,就是报文有可能重复发送,所以TCP有去重的机制,将重复的报文全都去掉。又因为先发送的数据未必先到达,有有了乱序重拍功能。
  • 滑动窗口:我们在发送数据的时候,如果一次发送的数据很小,因为每发送一次都需要确认一次,发送的速率就会很慢,但是如果发送的数据量很大,客户端来不及处理,再发就有可能造成数据丢失,所以有了滑动窗口机制来进行流量控制,滑动窗口的大小表明未经确认可以发送的数据量又大多。

二、UDP协议

UDP 是用户数据报协议,是 一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768 是UDP的正式规范。 UDP在IP报文的协议号是17。

(1)特点

udp是一种无连接的数据包传输协议,没有tcp那样复杂的数据传输保证,发送数据之后不管客户端能不能收到数据都不在发送,除非重新收到请求。接受端要保证一次性收完数据,收不完剩下的数据将丢失。

(2)要注意的问题

  • 当在同一个协议底下,一个端口号不能被多次链接,但是在不同的协议下可以使用相同的端口号和ip号。
  • 同一个进程可以创建多个套接字。

三、TCP协议和UDP协议的区别


下面给出一个TCP和UDP的链接帮助理解。
https://b23.tv/kzdp4W

tcp、udp协议连接的建立和释放相关推荐

  1. 【计算机网络】传输层 : 总结 ( TCP / UDP 协议 | 寻址与端口 | UDP 协议 | TCP 协议特点 | TCP 连接释放 | TCP 流量控制 | TCP 拥塞控制 ) ★★★

    文章目录 一.传输层 TCP / UDP 协议 ★ 二.寻址端口号 ★ 三.UDP 协议特点 四.UDP 协议首部格式 五.UDP 校验 六.TCP 协议 特点 ★ 七.TCP 报文段首部格式 八.T ...

  2. 最全的TCP/UDP 协议知识点整理

    关于计算机网络的基础知识,我前面写的两篇文章是入门文章,可以帮你构建一个计算机网络的基础架构,有了这个基础架构,后面的学习会很简单.下面是两篇文章的连接~~ 计算机网络体系结构与参考模型(1) 计算机 ...

  3. 从零开始的计网学习——运输层(计网TCP/UDP协议部分,面试核心、高频考点,必读!)

    文章目录 5.1 运输层概述 5.2 运输层端口号.复用和分用的概念 端口号 发送方的复用和接收方的分用 5.3 UDP和TCP的对比 TCP的流量控制 5.5 TCP拥塞控制 慢开始算法 拥塞避免算 ...

  4. 什么是TCP/UDP协议?(超简单,一看就会)

    TCP/UDP协议做了什么? TCP/UDP协议处于计算机网络的第四层"传输层",负责传输数据包. 数据包怎么传?(UDP协议) TCP/UDP协议处于计算机网络的第四层" ...

  5. TCP/UDP协议总结与应用层常见协议及端口

    TCP/UDP协议总结与应用层常见协议及端口 1.TCP协议 TCP协议概述 TCP的应用场景 TCP的特点 TCP的报文格式 TCP三次握手 TCP四次挥手 2.UDP协议 UDP概述 UDP的应用 ...

  6. TCP/UDP协议基本概念

    TCP和UDP协议是TCP/IP协议的核心. TCP 传输协议:TCP 协议是一TCP (Transmission Control Protocol)和UDP(User Datagram Protoc ...

  7. 网络编程—网络基础概览、socket,TCP/UDP协议

    网络基础概览 socket概览 socket模块-TCP/UDP的实现 TCP/UDP总结 网络基础概览 osi七层协议各层主要的协议 # 物理层传输电信号1010101010 # 数据链路层,以太网 ...

  8. TCP/UDP端口连接测试

    TCP/UDP端口连接测试 TCP端口连接测试 测试主机与目标端口的网络是否通畅 telnet ip port UDP端口连接测试 1.测试目标端口是否正常(前提是目标主机上启动了服务端口,且本机与服 ...

  9. 网络层协议与应用及传输层TCP/UDP协议

    网络层协议与应用及传输层TCP/UDP协议 目录 一.IP数据包格式 二.ICMP协议 三.ARP协议及ARP工作原理 四.TCP协议及常用端口号 五.UDP协议及常用端口号 一.IP数据包格式 网络 ...

最新文章

  1. 项目管理协作软件,打造超强执行力团队!
  2. 扫盲!Java可变长数组,看这篇就对了!
  3. 为myeclipse分配更大的内存
  4. Marketing Cloud里取得系统contact数目的API
  5. 《Java技术》第九次作业计科1501赵健宇-IO
  6. 前端websocket获取数据后需要存本地吗_是什么让我放弃了restful api?了解清楚后我全面拥抱GraphQL...
  7. 计算机网络协议包头赏析-TCP
  8. java byte 正数最大_关于JAVA中Byte类型的取值范围的推论(*零为正数,-128在计算机中的表示方法...)...
  9. STM32 - 定时器的设定 - 基础 - 05 - Arbitrary waveform generation using timer DMAburst feature - 任意波形的序列产生
  10. 递归——幂次方(洛谷 P1010)
  11. android 写空指针,写下文本内容时bufferedwriter一直显示空指针,求指教
  12. [转载] 高阶函数和柯里化
  13. 2018-2019-2 20175228实验二《面向对象程序设计》实验报告
  14. 强大新UI装逼神器微信小程序源码+多模板支持多种流量主模式
  15. 无线充QI协议之TX与RX通讯方式篇
  16. 师慧gis三维虚拟校园在高校教学管理中的应用价值
  17. win10系统任务栏不显示最小化窗口的处理步骤
  18. 赛事解析|乒乓球时序动作定位大赛亚军方案分享
  19. F. Elongated Matrix
  20. 微信小程序,图片双指放大缩小

热门文章

  1. java基础——java位运算
  2. 减少HQL 的MAP数
  3. Fortinet网络接入及安全方案配置步骤
  4. js高级教程阅读笔记 第五章-引用类型(5.6)
  5. vue2.0 与 bootstrap datetimepicker的结合使用
  6. DevOps:软件架构师行动指南3.1 概述
  7. MySQL安装过程启动mysqld_safe中提示的pid ended错误导致无法启动问题处理
  8. CocoaPods (第三方资源管理框架)
  9. Introduction to Objects
  10. Docker安装Tomcat、MySQL和Redis