当前位置: 首页 > article >正文

TCP/IP基础

TCP/IP的概念

TCP/IP是一个协议簇,包括多个协议

定义了计算机操作系统如何连入因特网,以及数据如何在他们之间传输的标准。

TCP/IP的分层结构

TCP/IP按照层次可以分成四层,应用层、传输层、网络层和数据链路层

应用层

包括虚拟终端协议TELNET,文件传输协议FTP,超文本传送协议HTTP等高层协议。

传输层

包括UDP协议,TCP协议

网络层

使主机把分组发往任何网络,并使分组独立的传送向目标。IP协议

数据链路层

负责接收上层发来的IP数据报并向外发送,或接受处理网络上传来的物理帧

如果两台计算机在不同的网段中,那么需要经过n个路由器,具体如图所示

而目的主机收到数据包后,如何经过各种协议栈到达应用程序呢

以太网驱动程序首先根据以太网首部中的“上层协议”字段确定该数据帧的有效载荷(payload,指除去协议首部之外实际传输的数据)是IP、ARP还是RARP协议的数据报,然后交给相应的协议处理。假如是IP数据报,IP协议再根据IP首部中的“上层协议”字段确定该数据报的有效载荷是TCP、UDP、ICMP还是IGMP,然后交给相应的协议处理。假如是TCP段或UDP段,TCP或UDP协议再根据TCP首部或UDP首部的“端口号”字段确定应该将应用层数据交给哪个用户进程。IP地址是标识网络中不同主机的地址,而端口号是同一台主机上标识不同进程的地址,IP地址和端口号合起来标识网络中唯一的进程。
注意,虽然IP、ARP和RARP数据报都需要以太网驱动程序来封装成帧,但是从功能上划分,ARP和RARP属于链路层,IP属于网络层。虽然ICMP、IGMP、TCP、UDP的数据都需要IP协议来封装成数据报,但是从功能上划分,ICMP、IGMP与IP同属于网络层,TCP和UDP属于传输层。

应用层

DNS

实现域名与实际IP地址之间的转换。

传输层

为应用层提供会话和数据报通信服务。

TCP协议

是面向连接的、保证高可靠性的传输层协议。

会将应用层数据加上一个首部。

typedef struct TCP_HEADER//TCP头定义,共20个字节
{
short sSourPort;
//源端口号16bit
short sDestPort;//目的端口号16bit
unsigned int uiSequNum;//序列号32bit
unsigned int uiAcknowledgeNum;//确认号32bit
short sHeaderLenAndFlag;前4位:TCP头长度;中6位:保留;后6位:标志位
short sWindowsize;//窗口大小16bit
short sCheckSum;
//检验和16bit
short surgentPointer;//紧急数据偏移量16b1t
}TCP_HEADER,*PTCP_HEADER;

UDP协议

是无连接不可靠的传输层协议

typedef struct UDP_HEADER
//UDP头定义,共8个字节
{
unsigned short m_usSourPort;//源端口号16b1t
unsigned short m_usDestPort;//目的端口号16b1t
unsigned short m_usLength;//数据包长度16b1t
unsigned short m_usCheckSum;//校验和16b1t
}UDP_HEADER,*PUDP_HEADER;

网络层

向上层提供简单灵活的、无连接的数据报服务

IP协议

将上层数据报封装成IP数据包后进行传输,如果数据包太大,还需要分片传输

IP协议特点

不可靠、无连接、无状态

struct iphdr{
#if defined( LITTLE ENDIAN BITFIELD)
u8 ih1:4,
version:4;
#elif defined{ BIG ENDIAN BITFIELD)
u8 version:4,
ih1:4;
#else
#error "Please fix <asm/byteorder.h>"
#endif
u8 tos;
be16 tot len;
be16 id;
be16 frag off;
u8 ttl;
u8 protocol;
sum16 check;
be32 saddr;
be32 daddr;
/*The options
start here.*/
};

IP数据包分片

IP协议在传输数据包的时候将数据包分成n片传输,在目的系统中进行重组。

最大长度MTU=1500bit

ARP协议

将IP地址转化为MAC地址

工作流程

1.本地主机在局域网中广播ARP请求

2.目的地址收到这个广播报文之后用ARP协议对其解析,并发送ARP应答包

3.本地主机收到ARP应答后开始传送数据报

RARP协议

允许局域网的物理机器从网关服务器的ARP表中或者缓存上请求其IP地址

工作流程

1.主机发送一个本地的RARP广播

2.RARP服务器收到此请求后检查RARP表,查找该MAC地址对应的IP地址

3.如果存在,就给主机发送一个响应数据包,不存在就不做任何回应

4.主机得到IP地址后就开始通信

ICMP协议

用于探测网络是否联通、主机是否可达、路由是否可用等

可分为两类:差错报文和查询报文

数据链路层

基本概念

将源计算机网络层的数据可靠的传输到相邻节点目标计算机的网络层

主要功能

  1. 为网络层提供服务
  2. 成帧、帧定界、帧同步、透明传输
  3. 差错控制功能
  4. 流量控制
  5. 链路管理
  6. MAC寻址
typedef struct _MAC_FRAME_HEADER//数据帧头定义
{
char cDstMacAddress[6];//目的MAC地址
char cSrcMacAddress[6];//源MAC地址
short m_cType;//上一层协议类型,如0x0800代表上一层是IP协议,0x0806为ARP
}MAC_FRAME_HEADER,*PMAC_FRAME_HEADER;

http://www.kler.cn/a/377215.html

相关文章:

  • 分布式专题(10)之ShardingSphere分库分表实战指南
  • 【QED】爱丽丝与混沌的无尽海
  • WhisperKit: Android 端测试 Whisper -- Android手机(Qualcomm GPU)部署音频大模型
  • 操作系统课程设计
  • 打造高效租赁小程序让交易更便捷
  • 48页PPT|2024智慧仓储解决方案解读
  • 人工智能证书合集
  • 一 Spring6启示录
  • .NET 一款通过COM接口绕过UAC的工具
  • Java学习路线:JUL日志系统(一)日志框架介绍
  • 国产服务器平台离线部署k8s和kubesphere(含离线部署新方式)
  • 【机器学习】 15. SVM 支撑向量机 support vector machine,拉格朗日,软边界,核函数
  • 计算机视觉实验一:图像基础处理
  • xlwings,让excel飞起来!
  • R向量运算c()数组矩阵matrix()
  • MRCTF2020:你传你ma呢
  • C++STL之 set 和 map:介绍及基本使用
  • Skywalking安装教程二:安装Elasticsearch
  • IDEA 打包首个java项目为jar包
  • CNAS软件测试的好处有哪些?上海软件测试中心推荐
  • Qt自定义控件:汽车速度表
  • 11.Three.js使用indexeddb前端缓存模型优化前端加载效率
  • 「Mac畅玩鸿蒙与硬件23」鸿蒙UI组件篇13 - 自定义组件的创建与使用
  • vscode clangd for cuda 插件配置
  • 华为机试HJ19 简单错误记录
  • 管家婆财贸ERP BB087.销售单复制一行