网络-TCP/UDP/IP体系结构和协议简介

本文深入讲解TCP/IP四层协议网络结构,包括应用层、运输层、网络层和网络接口层的功能与作用。详细分析UDP与TCP协议的特点,首部结构及编程流程,以及IP协议的首部字段解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标签:学习笔记。

1.TCP/IP四层协议网络结构

在这里插入图片描述
虽然之前有很多网络体系结构,但是这个是现在用的最多

  • 1应用层:应用层的作用是应用进程间的交互来完成一定功能。它定义的是应用进程间的通信规则。如SMTP协议
  • 2运输层:为应用提供通用的数据传输服务。它可同时对多个进程提供服务,可以理解成Android中的服务。
    该层主要用的两种协议:
    (1)TCP:(transmission Control Protocol),它提供可靠的传输服务,像银行网络肯定使用的是TCP(不可靠钱就没了)
    (2)UDP:(user datagram Protocol),它提供尽最大努力传输数据的服务。像我们传输视频时一般使用UDP传输。
  • 3.网络层:它的作用就是把数据发送不同主机上的进程。在该层用的协议叫IP(internet protocol),和一些路由协议,像路由器到网络层就够了。
  • 4.网络接口层:这里其实包含了数据链路层和物理层。可以这样理解数据链路层,A->B->C,A想传输数据到C,中间需要经过路由器B,但是A和C连接B的网络状态有可能不同,就需要加上一些同步信息、差错控制。以确保IP数据包正确的传输。还有物理层的理解,可以理解成传输比特流的硬件吧。

此外还有一个种漏斗状的网络结构。最顶层的是应用层的协议,像后面应用的实时流协议,都应用此层。
在这里插入图片描述

2.UDP协议简介

2.1 UDP首部介绍

官方的文档为:https://tools.ietf.org/html/rfc768

                  0      7 8     15 16    23 24    31
                 +--------+--------+--------+--------+
                 |     Source      |   Destination   |
                 |      Port       |      Port       |
                 +--------+--------+--------+--------+
                 |                 |                 |
                 |     Length      |    Checksum     |
                 +--------+--------+--------+--------+
                 |
                 |          data octets ...
                 +---------------- ...

                      User Datagram Header Format

上面图引用自官方文档,能够看到UDP首部由8个字节组成。

  • source port:源端口发送请求的应用进程所拥有的端口
  • destination prot:目的应用进程所拥有的端口
  • length:UDP数据报的长度,这里要特别注意,长度包含了首部的8个字节。
  • checksum:UDP数据报的校验和,有错误直接丢弃。详细介绍可以查阅官方权威文档

科普:(端口)
一开始我的理解是一个进程对应一个端口,后来百度了一圈发现一个进程可以拥有多个端口端口只和socket对象一一对应。后一篇博文,编程验证到底一个进程能不能拥有多个端口。
在这里插入图片描述
上面右侧可以直观的发现,顶层协议的数据头和数据部分,属于下层协议的数据部分。

2.2 UDP特点

  • UDP在发送数据之前不需要建立连接的,直接把数据都给对方。
  • UDP不保证数据的可靠,尽最大努力传输数据
  • UDP没有阻塞控制,平时在微信视频通话时,突然网络卡顿了,画面延迟,待网络恢复后,画面被快速播放(尽快将服务器上阻塞帧播放完毕)
  • UDP支持一对一,一对多,多对一,多对多的通信。

https://www.jianshu.com/p/3aea1d52e77f

2.3 UDP例程

例程可以从 下载到。
在这里插入图片描述

  • 数据包确认
    本次client<—>server共通信6次,一来一回总共有12次,下面可以看到确实有12个数据报。client端运行后首先会向server发送要给“hello world消息”,这个可以从实例程序中了解到。
    在这里插入图片描述
  • 流的追踪
    可以看到通过wireshark追踪的流和输入的是一样的。
    在这里插入图片描述
  • 协议分析
    当前分析的这个数据包为client->server,所以根据下方解析出来的,可以确定server对应的端口为8888,而clent进程的端口为6666。此外由于例子中client端的发送缓冲设置为1024字节,所以下面看到数据长度为1024,加上UDP header为1032字节。
    在这里插入图片描述

2.4 UDP编程流程图

d:\program files (x86)\microsoft visual studio 10.0\vc\atlmfc\include\afx.h(24): fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

解决方法:
在这里插入图片描述
如上图将MFC的使用设置为“在共享 DLL 中使用 MFC”。问题接口解决。

3.TCP协议简介

官方权威文档:https://tools.ietf.org/html/rfc793#page-15

3.1 TCP首部

下图截取自官网其中每一个横线代表一个bit。
在这里插入图片描述

3.2 TCP特点

  • 面向连接的运输层协议,在变成一开始时,客户端需与服务器建立连接,才能通信。
  • TCP连接只能有2个端点,只能一对一通信。建立连接后就可以拿到一个套接字(IP地址:端口),套接字只能被通信两端所确定。
  • TCP提供可靠的交付服务
  • TCP时全双工的,任意时间客户端和服务的都可以同时发送数据。两边都有缓冲

3.3 TCP例程

实例代码可以在这里下载:https://download.youkuaiyun.com/download/armwind/10991891

  • 实例程序输入效果:
    fasdf
  • 通信整个过程
    server运行开始前,本地已经开始抓包了,下面可以看到开始的三次握手过程(抓的包会提供在示例程序中)。
    在这里插入图片描述
  • 整个对话过程数据交互结果
    可以发现与一开始输入是对应的。
    在这里插入图片描述
  • TCP报文段分析
    下面是三次握手后,client发送给server的第一句话。结合TCP协议格式对照理解头部字段。
    在这里插入图片描述

3.4 TCP编程流程

4.IP协议简介

4.1 IP首部介绍

首部官方文档:https://tools.ietf.org/html/rfc791
在这里插入图片描述

  • version:ip协议的版本(4bit)
  • IHL:(Internet Header Length)首部长度。(4bit)
  • service type: 一般情况下不适用这个字段,直有在使用区分服务时,才有用(4bit)
  • totol length:首部和数据总长度
  • identification:计数器,每产生一个数据包计数器就加1,(16bit)
  • flags:(3bit)用来标记是不是后续还有数据,当mf=0,表示当前时最后一个数据报了。df:表示不能分片,就是数据不能截断。直有当df=0时才允许分片。
     Bit 0: reserved, must be zero
      Bit 1: (DF) 0 = May Fragment,  1 = Don't Fragment.
      Bit 2: (MF) 0 = Last Fragment, 1 = More Fragments.
          0   1   2
        +---+---+---+
        |   | D | M |
        | 0 | F | F |
        +---+---+---+
  • fragment offset:片内偏移,也就是说相对于用户数据字段七点,该片从何开始。(13bit)
  • time to live:(TTL)数据报在网络上的寿命,也可以称为跳数。跳数就是在路由器之间最多转发的次数,每转发一次TTL就减1(8bit).
  • protocol:协议类型(8bit):
  • header checksum:之检验数据报的首部,不包含数据部分。(16bit)
  • source address:源地址(32bit)
  • destination address:目的地址(32bit)

4.2 实例分析

对照上面的头部格式,分析下面数据包
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值