程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

小白看了也能懂的TCP/IP基础

balukai 2025-03-11 13:03:52 文章精选 39 ℃

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

经典的OSI七层模型,TCP/IP被分为4层,每层的协议的工作方式不一样,所封装的上层数据的方式也不一样。

二、端口号

IP地址是用来查找和发现网络中的地址的,端口号是用来进行程序相互通信的(打个比方:IP地址是一栋楼,端口就是进出这栋楼的入口),一个端口16Byte,即2^16=65536个,1~1023为公认的端口绑定了某些服务协议,不能随便分配,从1024—49151是被注册的端口,也成为“用户端口”,其他的为临时端口。

常用的有:

  • FTP : 21
  • TELNET : 23
  • SMTP : 25
  • DNS : 53
  • TFTP : 69
  • HTTP : 80
  • SNMP : 161
  • SSH :22

三、IP数据报

IP数据报的首部是5X4=20Byte,IP数据报=首部+数据部分

版本号:4位,0100表示IPV4,0110标志IPV6

首部长度:4位,表示首部的长度,包括可选字段

服务类型:最小时延、最大吞吐量、最高可靠性、最小花费4种,每种占1位

总长度:报头长度+数据部分长度=总长度(16位)最多可以2^16=65536字节

标识:16位,当数据报由于长度超过网络的MTU而必须分片时,根据分片中的标识字段是否相同判断这些分片是否同一个数据报的分片,以此来进行分片的重组。通常每发送一份报文它的值就会加 1。

标志:3位,只有2位有意义。第二位MF(More Fragment)位1表示后面还有‘’分片”的数据报,为0表示已到最后一个数据报;第三位DF(Don’t Fragment)为1意思是“不能分片”。只有当DF=0时才允许分片。

偏移:13 位,在接收方进行数据报重组时用来标识分片的顺序。

生存时间:8 位,用于设置数据报可以经过的最多的路由器个数。TTL 的初始值由源主机设置(通常为 32 或 64),每经过一个处理它的路由器,TTL 值减 1。如果一个数据报的 TTL 值被减至 0,它将被丢弃。

协议:8 位,用来标识是哪个协议向 IP 传送数据。ICMP 为 1,IGMP 为 2,TCP 为 6,UDP 为 17,GRE 为 47,ESP 为 50。

首部校验和:根据 IP 首部计算的校验和码。

源 IP 和目的 IP :数据报头还会包含该数据报的发送方 IP 和接收方 IP。

选项:是数据报中的一个可变长、可选的信息,不常用,多用于安全、军事等领域。

C++音视频开发学习资料:点击领取→音视频开发(资料文档+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)

四、IP的地址的分类

IP的地址分成4类ipv4地址占4个字节(32位)

A B C D E四类网络地址

例如:192.168.1.100

网络号:区分不同的网络(局域网)

主机号:区分同一个网络下不同的主机

A类地址:要求网络号占一个字节,主机号占3个字节,并且要求网络号(8位二进制)必须是0开头

0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx

网络号 0–127

主机号 1—254.254.254

B类地址:要求网络号占两个字节,主机号占2个字节,并且要求网络号(16位二进制)必须是10开头

10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx

网络号 128.0–191.255

C类地址:要求网络号占三个字节,主机号占1个字节,并且要求网络号(24位二进制)必须是110开头

110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx

网络号 192.0.0–223.255.255

D类地址:组播专用地址,不区分网络号和主机号,必须是1110开头

1110xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx

E类IP地址

以“llll0”开始,为将来使用保留。240.0.0.0到255.255.255.254,255.255.255.255用于广播地址。

五、ping和traceroute程序

ping程序和traceroute都是基于ICMP协议的工具。

用ping可以检测两台主机是否连,下图就是我用Ubuntu跟Windows各自ping的信息。ping 命令会返回一个 TTL 值,我们可以使用它来判断目标的操作系统类型。常见操作系统缺省 TTL 值如下:

UNIX TTL: 255;

Linux TTL: 64;

WINDOWS 95/98 TTL: 32;

Windows NT 4.0/2000/XP/2003/7/8/10 TTL:128。

traceroute 程序是用来侦测主机到目的主机之间所经路由情况的重要工具。

1、Linux需要安装traceroute才能进行侦测。

2、Windows用tracert进行侦测,下图是先经过我笔记本WiFi连接的192.168.1.1的路由,再经过一系列的路由最终到达谷歌的8.8.8.8

六、UDP

UDP (User Datagram Protocol)协议与TCP协议一样用于处理数据包,在OSI模型中,两者都位于传输层,处于IP协议的上一层。

它的主要特点有:

UDP 是无连接的,发送数据之前不需要建立连接(而 TCP 需要),减少了开销和时延。

UDP尽最大努力交付,不保证交付可靠性,因此主机不需要维护复杂的连接状态;。

UDP 是面向报文的,对于从应用层交付下来的 IP 数据报

UDP的首部开销小,只有8个字节,它比TCP的20个字节的首部要短。

UDP 没有拥塞控制,出现网络拥塞时发送方也不会降低发送速率。这种特性对某些实时应用是很重要的,比如 IP 电话,视频会议等,它们允许拥塞时丢失一些数据,因为如果不抛弃这些数据,极可能造成时延的累积。

UDP 支持一对一、一对多、多对一和多对多的交互通信。

UDP报文

UDP 数据报可分为两部分:UDP 报头和数据部分。其中数据部分是应用层交付下来的数据。UDP 报头总共 8 字节(2字节源端口、2字节目的端口、2字节长度、2字节校验和)

七、TCP

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

它的主要特点有:

面向字节流;

面向连接;

可靠通信方式,无差错、不丢失、不重复、按顺序。;

TCP 连接是 点对点 的,一条 TCP 连接只能连接两个端点。

UDP 支持一对一、一对多、多对一和多对多的交互通信。

TCP报文

TCP 数据报可分为两部分:TCP 报头和数据部分。其中数据部分是应用层交付下来的数据。TCP 报文段的报头有前 20 字节的固定部分

各字段的功能:

源端口:2字节

目的端口:2字节

序号:4字节,范围0~2^32-1,报头中的序号字段值则指的是本报文段数据的第一个字节的序号。

确认号:4字节,期望收到下个报文段的第一个数据字节的序号

数据偏移:4位,TCP报文段的报头长度,20字节+选项字段

保留:6位(URG、ACK确认、PSH推送、RST复位、SYN同步、FIN终止)

窗口:2字节,指自己的接收窗口大小

校验和:2字节,用于校验数据在传输中是否出错

紧急指针:2字节,当保留字段的URG=1有效

选项:长度可变,最长40字节

最近发表
标签列表