TCP,UDP协议

这篇具有很好参考价值的文章主要介绍了TCP,UDP协议。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 刚开始进入网络部分,首先需要了解协议是什么以及有哪些作用和各个协议的格式和约定等等的内容.为了方便和简化对协议的理解和介绍,本文先由简到难依次对 UDP,TCP,Http和Https协议做出较为详细的说明和比较.

1协议的作用

由于计算机之间的通信是通过网络来进行通信的.计算机通信时需要有内容的传输,为了规定咱们是如何建立连接和传输什么格式的内容,以及有各种各样的硬件厂商和操作系统,此时引入了协议,双方都按照协议来进行传输和建立连接,就避免了不同硬件和操作系统间无法传输内容的问题.
本文只介绍传输层TCP和UDP协议

2  UDP和TCP协议

2.1  UDP和TCP协议是什么

因为网络通信本身是一个极为复杂的过程在通信过程中我们可以人为的将网络通信划分为5个板块,组成TCP/IP协议簇.(TCP/IP协议簇有多重表示方式 7层 5层 4层) 本文这里介绍的是将该协议划分为4层时的一种情况.

TCP,UDP协议,网络协议,java,网络

       其中应用层一般是程序猿写代码进行一个项目内部规定的。传输层就是将应用层的数据进行出发点的目的地的规划,网络层就是具体规划出发点和目的地的传输路径了,数据链路层则是负责各个路由器节点直接的通信传输,物理就是咱们得光纤和路由器之类的.例如我是重庆的一个程序猿写了一个聊天室,我规定我传输的内容是一个加密字符串,然后我写代码将这个加密字符串发送到传输层此时就是应用层的作用. 传输层收到我发送的数据之后通过传输层协议看到我发送的数据目的地是南昌,然后传输层就将重庆到南昌这个行程告诉网络层,网络层就知道了,本次的出发地和目的地然后 ,就可以来规划我到底要怎么走才能从重庆去往南昌,是先由重庆到武汉在到南昌还是,由重庆先到长沙在到南昌,次时传输层就主要负责规划网络传输中具体的路线,规划好路线后,网络层就讲我要由重庆去长沙在到南昌的过程告诉数据链路层,然后数据链路层就知道了具体的路线,然后数据链路层就开始考虑我该怎么从重庆去往长沙,是做汽车还是高铁,以及到长沙了该怎么去往南昌,是飞机还是火车,此时数据链路层就具体负责了通信时各个节点的传输情况,最后都规划好以后物理层也就是咱们具体的交通工具了,在网络传输中也就是光纤和路由器等等了.

在查阅相关资料文献后,大部分将TCP/IP协议簇划分为了4个部分,其中将上述过程的数据链路层和物理层进行了结合,结合后名字有多种(我也不清楚怎么叫才正确)大体的叫法为链路层,或者网络接口层,物理接口层.

        而本来要介绍的UDP和TCP协议则是传输层中要遵守的协议。

下图也能很好的形容TCP与UDP的差别(网图看着好看拿的 有侵权就删了)

TCP,UDP协议,网络协议,java,网络

2.2 UDP协议和TCP协议的特点

(这里暂时先做一个简单的介绍,后面要是有时间的话 ,单独写一个模块详解TCP协议和UDP协议,以及用socket手搓一个小服务器出来)

UDP协议是数据传输层的协议其特点为

  • 无连接
  • 面向数据报
  • 不可靠传输
  • 大小受限

TCP协议也是数据传输层的协议其特点是

  • 有连接
  • 面向字节流
  • 可靠传输
  • 全双工传输

因为TCP建立连接的过程较为复杂所以此处先由UDP协议开始介绍.

2.2.1  UDP 无连接

无连接指的就是咱们在通信的过程中不会建立连接,就是只要我知道了你的ip地址我就可以给你发一条请求过来.而不需要经过你的同意.

2.2.2  UDP 面向数据报

UDP协议在发送数据请求的过程中,发送的数据格式是一个一个的报文,此过程被称为面向数据报.

2.2.3  UDP 不可靠传输

不可靠传输是建立在无连接的情况下的,大概可以表述为就是我通过UDP协议发送了一条信息过后要是该条信息在传输过程中意外丢失了,或者这条信息因为某种原因对面并没有接收,此时站在我也就是发送方的角度来讲,我是并不知情的,也就是并不清楚对方是否收到了我发送的信息,这也被称为不可靠传输.但也因为这个机制,所以UDP协议的传输速度远远大于TCP的可靠传输的速度.

2.2.4 UDP 大小受限 

UDP在传输过程中只能传输有限的数据量,因为这个特性UDP协议通常用来传输比较小的数据.

3 TCP协议

因为TCP协议比较复杂,所以单独设立一个板块.

3.1 TCP 协议建立连接的过程 (三次握手 四次挥手)

在上文中提到了TCP协议的一个特点为有连接协议,所以如何建立连接是我们要掌握的一大难点,同时也是面试最常见的一个问题就是TCP建立连接的过程,也被称为三次握手,四次挥手,为什么要这样命名现在来进行解释.

首先,在了解TCP建立连接的过程中我们需要先对TCP的请求头有个初步了解,下图为TCP协议的请求基本格式(取自网络)

TCP,UDP协议,网络协议,java,网络

三次握手(建立连接)

在建立连接的过程中,首先是客户端发送SYN包主动去找服务端,服务端接收到相应的SYN包之后会返回给客户端一个ACK包来确定自己收到了此次请求,同时服务端又会像客户端发送相应的SYN包,客户端收到SYN包之后返回服务端一个ACK,即连接建立的过程完成.

第一次客户端发送SYN请求找服务端,说明我需要建立连接,(因为TCP确认应答的机制)然后服务端收到我的请求后,返回一个ACK说明我们可以进行建立连接了,同时客户端发送SYN请求后并且收到了ACK应答报文,当前客户端具有发送请求和接收请求的能力,但此时站在服务端的角度来讲我只是收到了SYN请求并且发送了一个ACK应答报文回去 ,但我此时并不知道对方收到我的ACK应答报文没,我只知道目前我的能接受请求,所以此时服务端又主动发起SYN请求来确定客户端是否收到我刚发送的请求,然后客户端返回一个ACK确认应答表明我能接受到请求.此时建立连接的过程就完成了.TCP,UDP协议,网络协议,java,网络

上述过程中进行了4次通信,为什么还被称为3次握手呢?

原因是第一次客户端收到SYN请求后 返回一个ACK确认应答,同时服务端又会向客户端发送SYN请求为了节省网络资源 服务器会讲确认应答的ACK和下一次发送的SYN请求和并到一起发送

(上图TCP协议的请求头里面

TCP,UDP协议,网络协议,java,网络这个部分每个部分都是一个字节,要是对应部分的二进制位为1则表示当前请求携带相应的包和数据,0则表示没有.)一起发送的话表名当前请求 里面的ACK和SYN标志位均为1

所以TCP建立连接的过程可以进行4次握手,但是会浪费网络资源,为了简化就改为了三次握手.

上述过程不难看出,三次握手的过程可以保证传输路径的通畅性,例如在我们平时生活中,在每天地铁工作前都会有一般试运行的地铁来行走一圈以确保当前地铁的通畅运行,这里TCP协议建立连接过程也是如此 在建立连接的过程中通过三次握手来确保建立的连接是畅通的,同时在三次握手的过程中,可以协商参数的传递。

讲完上述三次握手的过程接下来是四次挥手的过程

四次挥手(断开连接)

TCP协议为什么是四次挥手 改为三次挥手可以吗.

TCP四次挥手的过程和三次握手的过程类似。一般有客户端主动发起请求,(服务端也存在主动发起请求的可能但非常小,但三次握手一定是客户端主动发起的请求),TCP,UDP协议,网络协议,java,网络客户端向服务器发送带有FIN标志位的请求,同时服务器收到请求后,又发送带有FIN标志位的请求给客户端,客户端返回一个ACK确认应答过后,此时就能正常的断开连接了,

TCP,UDP协议,网络协议,java,网络

这里的四次挥手,其中客户端也是发送的ACK和FIN报文 ,此时能将四次挥手改为三次挥手吗?

答案是 基本不能(极少数情况有可能可以)  原因也很简单,因为三次握手建立连接的过程是内核中完成的,不需要我们手动去控制,但是客户端释放连接,是需要主动调用socket.close()方法的所以在大部分的情况下,服务端发送的ACK和FIN请求不在同一个时间段内,所以没办法将标志位合并为同一个请求.所以四次挥手不能改为三次挥手.

不想写了,下一篇博客继续文章来源地址https://www.toymoban.com/news/detail-771925.html

到了这里,关于TCP,UDP协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【计算机网络】UDP协议与TCP协议

    端口号(Port)标识了一个主机上进行通信的不同的应用程序; 在TCP/IP协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信(可以通过netstat -n查看); 服务器的同一个服务会使用多进程或者多线程的方式,对于不同的客户端请

    2024年01月25日
    浏览(56)
  • 【传输层】网络基础 -- UDP协议 | TCP协议

    端口号(Port)标识了一个主机上进行通信的不同的应用程序 在TCP/IP协议中,用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信(可以通过 netstat -n 查看) 0 - 1023:知名端口号,HTTP,FTP,SSH等这些广为使用的应用层协议,他

    2024年02月09日
    浏览(49)
  • 【计算机网络】TCP协议与UDP协议详解

    文章目录 一、传输层 1、1 再次理解传输层 1、2 再次理解端口号 1、2、1 端口号范围划分 1、2、2 认识知名端口号 1、3 网络常用指令netstat 与 pidof 二、UDP协议 2、1 UDP协议的报文 2、2 UDP的特点  2、3 UDP的缓冲区 三、TCP协议 3、1 TCP协议的报文 3、2 确认应答 3、3 按序到达 3、

    2024年02月08日
    浏览(49)
  • 【计算机网络之TCP/UDP篇】TCP与UDP协议详细介绍

    目录 一、TCP协议 1.1 TCP协议段 1.2  TCP的原理 1.2.1   确认应答机制(安全机制) 1.2.2 超时重传机制(安全机制) 1.2.3  TCP是如何实现可靠性传输? 1.2.4   连接管理机制(安全机制) 1.2.5  滑动窗口机制(效率机制) 1.2.6 流量控制机制 1.2.7 拥塞控制(安全机制) 1.2.8  延

    2024年02月07日
    浏览(52)
  • 【计算机网络】UDP/TCP协议

    我们先来看一张图; 在研究UDP前我们先来回答两个问题: 有效载荷如何与报头分离? 如何将有效载荷交付? 第一个问题由于在报头里面有16位UDP长度(表示的是有效载荷+报头长度),而报头长度8字节是固定的,所以分离时我们只需要用整个报文的大小减去固定的8字节报头数据即

    2024年02月08日
    浏览(62)
  • Linux网络-UDP/TCP协议详解

    2023/10/17 14:32:49 Linux网络-UDP/TCP协议详解 零、前言 一、UDP协议 二、TCP协议 1、应答机制 2、序号机制 3、超时重传机制 4、连接管理机制 三次握手 四次挥手 5、理解CLOSE_WAIT状态 6、理解TIME_WAIT状态 7、流量控制 8、滑动窗口 丢包问题 9、拥塞控制 10、延迟应答 11、捎带应答 12、面

    2024年02月07日
    浏览(53)
  • 【网络编程】TCP,UDP协议详解

    小亭子正在努力的学习编程,接下来将开启javaEE的学习~~ 分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~   目录 前言 TCP协议 TCP协议特点 TCP协议通信场景 TCP协议的几个重要机制 一、

    2023年04月19日
    浏览(50)
  • 网络编程(TCP与UDP协议)

    Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。 Java提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在 Java 的本机安装系统里,由 JVM 进行控制。并且 Java 实现了一个跨平台的网络库, 程序

    2023年04月27日
    浏览(49)
  • 【计算机网络】UDP/TCP 协议

    端口号(Port)标识了一个主机上进行通信的不同的应用程序。在 TCP/IP 协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信(可以通过netstat -n查看)。 0 - 1023: 知名端口号,HTTP, FTP, SSH 等这些广为使用的应用层协议,它们的

    2024年03月14日
    浏览(60)
  • 网络编程——TCP/IP协议族(IP协议、TCP协议和UDP协议……)

    1、IP协议简介 IP协议又称 网际协议 特指为实现在一个相互连接的网络系统上从源地址到目的地传输数据包(互联网数据包)所提供必要功能的协议,是网络层中的协议。 2、特点 不可靠 :它不能保证IP数据包能成功地到达它的目的地,仅提供尽力而为的传输服务 无连接 :IP 并不

    2024年02月13日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包