网络原理(TCP/UDP)

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

目录

一. 网络基础

1. IP地址

 2. 端口号

3. 协议

4. OSI七层模型

二. UDP协议

2.1 UDP的协议端格式:

2.2 UDP的特点

三. TCP协议

 3.1 TCP协议段格式

 3.2 TCP原理

(1)确认应答机制

(2)超时重传机制

(3)三次握手,四次挥手

(4)滑动窗口 

(5)流量控制

(6)拥塞控制

(7)延迟应答

 四. TCP/UDP对比


一. 网络基础

1. IP地址

IP地址相信大家早已都耳熟能详了吧,但是对于初学网络的小伙伴来说,还是一个很懵懂的概念,没关系,本人也是刚对网络有了一个初步的了解,希望通过下面的学习总结,来帮助大家一起了解网络的一些基本原理;

概念:

IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址;

举个例子:IP地址就相当与快递的收货地址虽然定位到了主机,但是IP地址还存在一个问题,就是我们要把数据传输到哪个进程接收,这就需要端口号了;

 2. 端口号

概念:在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程。

举个例子:上面说到IP地址是快递的收货地址,那么端口号就是指定的收货人,以确保传输的数据能准确的到达定点;

关于端口号的说明:

一个进程可以绑定多个端口号,多个进程不能绑定同一个端口号;一个进程启动后,系统会会随机分配一个端口;

3. 协议

概念:协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。

为什么需要协议呢?

简单点来说,就是一套标准,因为计算机的有不同操作系统,不同的版本,多家厂商生产出来的硬件有有所区别,为了让这些设备都能保持正常的通信,就约定了一个标准,这一套标准就叫协议;

常见的默认端口号:

  • 22端口:预留给SSH服务器绑定SSH协议
  • 21端口:预留给FTP服务器绑定FTP协议
  • 23端口:预留给Telnet服务器绑定Telnet协议
  • 80端口:预留给HTTP服务器绑定HTTP协议
  • 443端口:预留给HTTPS服务器绑定HTTPS协议

4. OSI七层模型

OSI 是 Open System Interconnection 的缩写,译为“开放式系统互联”;OSI 模型把网络通信的工作分为 7 层,从下到上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层;

OSI 只是存在于概念和理论上的一种模型,它的缺点是分层太多,增加了网络工作的复杂性,所以没有大规模应用。后来人们对 OSI 进行了简化,合并了一些层,最终只保留了 4 层,从下到上分别是接口层、网络层、传输层和应用层,这就是大名鼎鼎的 TCP/IP 模型;

网络原理(TCP/UDP)

就拿TCP/IP模型来说:

  • 应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。
  • 传输层:负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。
  • 举个例子:传输层只关心两台主机通信的地址,比如我们网上购物,从北京到上海,我不关心中途是怎么运输的,我只关心起点和终点;
  • 网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层。
  • 举个例子:还是拿购物一事来说,网络层关注的是路线怎么走,比如从北京到上海有很多条路可以走;
  • 数据链路层:负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层。
  • 举个例子:数据链路层关注的是路径之间的相邻节点该怎么走,比如就北京到上海,要路过多个城市,而这些多个城市之间的路线是数据链路层所关心的;
  • 物理层:负责光/电信号的传递方式。比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层

注意:

  • 必须是同一层次进行通信,比如,A 计算机的应用层和 B 计算机的传输层就不能通信,因为它们不在一个层次,数据的拆包会遇到问题。
  • 每一层的功能都必须相同,也就是拥有完全相同的网络模型。如果网络模型都不同,那不就乱套了,谁都不认识谁。
  • 数据只能逐层传输,不能跃层。
  • 每一层可以使用下层提供的服务,并向上层提供服务。

二. UDP协议

UDP(User Datagram Protocol)是一个简单的面向消息的传输层协议;

2.1 UDP的协议端格式:

网络原理(TCP/UDP)

源端口: 数据从这里发出;

目的端口:数据要去的地方;

长度:标识UDP头的长度,包括首部长度和数据长度;一个UDP报文最大长度就是64KB;

校验和:它存在的意义就是用来判定一下,如果校验和出错,就会直接丢弃;


2.2 UDP的特点

(1)无连接

UDP传输的过程类似于寄信,知道对方的端口号和IP地址就可以进行传输,不需要建立连接

(2)不可靠

没有任何安全机制,发送端发送数据报以后,如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息;

(3)面向数据报

应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并;


三. TCP协议

TCP(Transmission Control Protocol)传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层协议。

 3.1 TCP协议段格式

网络原理(TCP/UDP)


 3.2 TCP原理

(1)确认应答机制

网络原理(TCP/UDP)

网络原理(TCP/UDP)

    当发送端发送数据时,如上图,第一次发送数据时,数据包括一个报头和载荷,报头是序号,载荷里面是要发送的数据,当第一次发送时,接收方会接受应答,并返回确认序号向发送发索要下一次的数据,通过ack的确认序号,告诉发送方我已经接受到了哪些数据;

    在进行确认应答时,往往会伴随着后发先至的情况,就是先发送的数据后到,后发的数据先到的情况,这种情况也不用担心,对于TCP来说,它会帮我们整队,在TCP内部有个接受缓存区,这是内核中的一块内存空间,当出现乱套的情况,TCP会在这个缓存区按照序号帮我们对收到的消息进行整队;

(2)超时重传机制

在网络的传输过程中,难免会发生"丢包"的情况,那么TCP就会采取重传机制,以便于发送的数据包能准确无误的到达目的地,在丢包中,一般分为两种情况:

1.第一次发送方的数据直接丢了,接收方没到到,不会发送ack;

网络原理(TCP/UDP)

 

2.接受方收到数据了,返回的ack丢了;

网络原理(TCP/UDP)

这种情况下,就有一个问题,当接受方返回的ack丢了之后,发送方会继续发送,这样接受方就一直收到重复的数据,这可不是一个小问题,就拿手机支付来说,本来要付1元,结果因为丢包接受方没有返回响应,就会一直扣款!!!

当然,TCP的功能是很强大的,这点问题TCP也会采取相应的措施来帮我们解决,TCP会在接收缓存区根据收到的数据的序号,来帮助我们去重,这样就保证读到的数据不会是重复的!!!

在重传的过程中,也有可能发生丢包,丢失的包继续发生重传,但是每丢包一次,超时等待的时间就会变长,TCP会认为重传也没戏了,于是就干脆放弃了(这种就是严重的网络问题),连续多次重传,都无法得到ack,此时TCP就会尝试重置连接,如果连接失败,TCP就会关闭连接,放弃网络通信了;

面试题:TCP是如何实现可靠性的?

答:确认应答+超时重传

这里不能回答三次握手和四次挥手,这个是和连接相关的,而非可靠性;

(3)三次握手,四次挥手

TCP建立连接:三次握手

所谓握手,就是通信双方,进行一次网络交互,相当于客户端和服务器之间,通过三次交互,建立了关系;

网络原理(TCP/UDP)

过程:  

1、第一次握手:客户端给服务器发送一个 SYN(同步报文段) 报文。

  2、第二次握手:服务器收到 SYN 报文之后,会应答一个 SYN+ACK 报文。

  3、第三次握手:客户端收到 SYN+ACK 报文之后,会回应一个 ACK 报文。

  4、服务器收到 ACK 报文之后,三次握手建立完成。


三次握手的作用:

简单点来说,就是验证了客户端和服务器端各自的发送能力和接收能留是否正常;


注:三次握手都是由内核自动完成的,应用程序干预不了;

TCP断开连接: 四次挥手

网络原理(TCP/UDP)

过程:

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和SYN是合并发送到客户端的,而四次挥手这里的FIN和ACK是不能合并发送的,这是因为三次握手中的ACK和SYN是同一时机触发的,都是由内核完成的,而四次挥手中的ACK和FIN是不同时机触发的,ACK是在内核完成的,而FIN是由应用程序代码控制的,是在调用socket的close方法的时候才会触发FIN;

(4)滑动窗口 

上面说到当发送方发送一个数据段,都要给一个ACK确认应答,收到ACK之后才会发送下一个数据段,如果我们要发送大量的数据段时,那么发送方这边就需要一条一条的等待ACK,这样就浪费了大量时间,所以为了缩短等待时间,这里就需要批量发送,以提高发送的效率;

网络原理(TCP/UDP)

 批量传输之后:

网络原理(TCP/UDP)

上述批量传输数据的过程,我们就叫做滑动窗口,批量发送并不是无厘头的去发,而是发送到一定程度,就等待ACK,我们把批量发送等待的数据,称为"窗口大小";

网络原理(TCP/UDP)

(5)流量控制

上面说的滑动窗口,就是为了让传输的效率更高,窗口越大,批量发送的数据越多,整体的效率就提上去了,可是并不是越快越好,如果发送太快了,就很容易把接收缓冲区给塞满了,此时你再发送数据,就很容易丢包了,TCP也有这样的机制,通过流量的控制,来限制一下发送方的速度;


那么是如何进行控制的呢???

网络原理(TCP/UDP)

我们让ACK报文中携带一个"窗口大小"的字段,当ACK为1的时候,此时就是一个ACK报文,此时窗口大小字段就会生效,这里是拿接受缓冲区的剩余空间作为窗口大小;

网络原理(TCP/UDP)

 当发送方发现对方满了之后,就会暂停发送,但是不会一直停止,每隔一段时间就会触发一个窗口探测报文,如果发现缓冲区有容量了,就会继续批量发送;

(6)拥塞控制

网络原理(TCP/UDP)

我们都知道,在客户端和服务器端之间往往都有很多的交换机和路由器,很明显,在传输路径上,中间任何一个设备出了问题,都会导致传输速率受到一定的影响;拥塞控制的作用就是衡量中间节点传输的能力;

拥塞控制是通过实验的方式,来找到一个合适的发送速率;开始的时候,按照一个小的速率发送,如果不丢包,就可以适当提高一下速率,如果丢包,就把速率调小;最后得到一个合适的发送速率,这实际上也是一个动态平衡的过程;

网络原理(TCP/UDP)

 

(7)延迟应答

网络原理(TCP/UDP)

上面说到接收方要返回ACK给发送方,这里的延迟应答就是不是立即发送ACK,而是等一会再发送,这样做的好处就是可以增大窗口的大小,因为延迟的这一小会儿,应用程序从接受缓存区里消费了一批数据了,同时也能让发送方的发送速率大一些;

TCP中延迟应答的两种方式:

  • 数量限制:每隔N个包就应答一次;
  • 时间限制:超过最大延迟时间就应答一次;

 四. TCP/UDP对比

相同点:TCP和UDP都是网络层之上的,传输层协议,都能都能保护网络层的传输,双方的通信都需要开放端口,TCP和UDP中都存在复用和分用技术;

不同点:TCP是可靠传输的,UDP是不可靠传输的;

网络原理(TCP/UDP)

使用场景:

绝大部分场景下,都可以使用TCP,对于效率要求较高但对于可靠性要求不高的场景下,可以使用UDP,不过归根结底,还是要根据具体的需求去选择使用;文章来源地址https://www.toymoban.com/news/detail-419087.html

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

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

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

相关文章

  • 网络基础2【HTTP、UDP、TCP】

    目录 一.应用层 1.协议 2.网络版计算器 3.HTTP协议 (1)了解url和http (2)http的用处 (3)urlencode和urldecode (4)http协议格式 4.HTTPS协议  (1)加密 (2)为什么要加密 (3)常见的加密方式 (4)数据摘要(数据指纹) (5)加密方案 (6)证书 (7)数字签名(数据签名) (

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

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

    2024年02月09日
    浏览(52)
  • 网络基础二——传输层协议UDP与TCP

    ​ 传输层协议有UDP协议、TCP协议等; ​ 两个远端机器通过 使用\\\"源IP\\\",“源端口号”,“目的IP”,“目的端口号”,\\\"协议号\\\"来标识一次通信 ; 9.1端口号的划分 ​ 0-1023:知名端口号,HTTP,HTTPS,FTP,SSH等应用层协议,他们的端口号都是固定的;如:ssh使用的是22号端口,

    2024年04月12日
    浏览(46)
  • 网络编程 tcp udp http编程流程 网络基础知识

    OSI分层:应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 tcp/ip: 应用层 传输层 网络层 数据链路 ip地址:唯一标识一台主机 ipv4 32位 ipv6 128位 寻址 可以反映物理上的一个变化 MAC地址:48 固化在计算机中 ip地址又两部分构成:网络号+主机号 端口号:标识一个应用程序

    2024年02月13日
    浏览(76)
  • HCIA基础【网络基础】【交换机】【路由器】【OSI七层参考模型】【TCP/UDP】【操纵网络设备命令】

    目录 一、网络基础 1.交换机 1.路由器 1.ARP协议 二、OSI七层参考模型 应用层 表示层: 会话层: 传输层: 1,功能 1.分段(受到MTU限制): 2.提供端口号: 2,TCP/UDP   IP的包头 TCP的分段和IP的分片 常见协议端口号: 网络层: ⭐IP地址分类: 特殊IP地址: 数据链路层: 物理层

    2024年02月21日
    浏览(48)
  • Java-Java基础学习(2)-网络编程-TCP-UDP

    2.1. 通信协议 TCP、UDP对比 TCP 打电话 连接,稳定 三次握手,四次挥手 客户端、服务端 传输完成,释放连接,效率低 UDP 发短信 不连接,不稳定 客户端,服务端,没有明确的界限 不管有没有准备好,都可以发给你 导弹 DDOS:洪水供给!(饱和攻击) 2.2. Tcp上传测试 总结:

    2024年04月09日
    浏览(47)
  • Java网络编程基础:TCP Socket套接字编程 IntAddress UDP等...

    目录 一,网络基础 1.IP地址 2.端口 3.TCP/UDP协议 4.网络编程开发模式  二,基于套接字的Java网络编程 1.Socket  2.InetAddress 三.基于TCP的Socket网络编程 1.单服务器端与单Socket客户端一次通讯 2.单服务器端接收多次通讯  3.TCP网络通讯补充 四,基于UDP的网络编程 1. DatagramSocket:收发

    2024年04月29日
    浏览(46)
  • C++开发基础之网络编程WinSock库使用详解TCP/UDP Socket开发

    Winsock是Windows操作系统提供的用于网络编程的API库。它是Windows Sockets的简称,也就是套接字库。Winsock可以让开发人员使用TCP/IP协议族中的各种协议,如TCP、UDP等,在Windows平台下进行网络编程。 Winsock提供了一组函数和数据结构,这些函数和数据结构可以让开发人员创建和管理

    2024年01月23日
    浏览(51)
  • UE5 独立程序的网络TCP/UDP服务器与客户端基础流程

    引擎源码版,复制EngineSourcePrograms路径下的BlankProgram空项目示例。 重命名BlankProgram,例如CustomTcpProgram,并修改项目名称。  修改.Build.cs内容 修改Target.cs内容     修改Private文件夹内.h.cpp文件名并修改.cpp内容 刷新引擎 在项目.Build.cs中加入模块  .cpp 客户端.cpp 未完待续。。

    2024年01月17日
    浏览(60)
  • 【Java基础教程】(四十七)网络编程篇:网络通讯概念,TCP、UDP协议,Socket与ServerSocket类使用实践与应用场景~

    了解多线程与网络编程的操作关系; 了解网络程序开发的主要模式; 了解 TCP 程序的基本实现; 在Java中,网络编程的核心意义是实现不同电脑主机之间的数据交互。Java采用了一种简化的概念,将这个过程进一步抽象为JVM(Java虚拟机)进程之间的通信。可以在同一台电脑上

    2024年02月15日
    浏览(67)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包