网络编程学习笔记(1)--TCP/IP协议基础

news2024/9/21 2:43:43

目录

全称

定义

分层结构

端到端的数据传输

​编辑

举个栗子——浏览网页

应用层

传输层

TCP

UDP

网络层

IP协议

特点

IP地址

网络掩码

ARP协议

PARP协议

ICMP协议

 数据链路层

名词解释

数据段

数据报

数据包

数据帧

比特流


全称

Transmission Control Protocol/Internet Protocol,传输控制协议/因特网互联协议,又名网络通信协议。

定义

是Internet最基本的协议、Internet国际互联网络的基础。它不是指一个协议,而是一个协议

簇,包括多个网络协议,比如了IP协议、IMCP协议、TCP协议以及我们更加熟悉的HTTP协议、

FTP协议、POP3协议等。

分层结构

TCP/IP协议簇按照从上到下可以分为四个层:应用层、传输层、网际层、网络接口层(数据链路层) 

端到端的数据传输

数据封装:在发送端,从传输层开始,将上层的数据加本层协议的协议头形成数据包的过程。

数据解封:在接收端,从底层开始,将本层的数据按照本层的协议去掉协议头的过程。

举个栗子——浏览网页

 发送方:

 1. 打开浏览器,输入网址,访问网页。

     应用层采用HTTP协议,将网址等信息组成HTTP数据传给传输层。

 2. 传输层在应用层数据前面加上TCP首部,标记端口为80(Web服务器默认端口),将数据传至 

     网络层。

 3. 网络层在数据加上本地IP和目标主机IP,将该IP包(报文)传授至链路层。

 4. 链路层加上本地MAC地址和目标MAC地址,此时的数据叫做帧。

     通过物理网卡将该帧以比特流的方式发送到网络上。

 5. 路由器读取数据,根据IP地址进行选路,到达真正网段,该网段的交换机读取比特流中的MAC 

     地址,找到目标主机。

 接收方:

 1. 链路层用网卡接收到了比特流,读取比特流中的帧,将帧中的MAC地址去掉,拿到IP数据包,

     传递给网络层。

 2. 网络层将IP从包的前面拿掉,取出带有TCP的数据(数据段)交给了传输层。

 3. 传输层拿到数据,看到TCP标记的端口是80端口,说明应用层协议是HTTP,将TCP头去掉并

     将数据交给应用层,告诉应用层对方要求的是HTTP的数据。

 4. 调用Web服务器程序,将目标网址的首页文件发送回去。

 如下图所示:

应用层

 应用层位于TCP/IP最高层,主要是为用户进程提供服务。

主要有以下几种协议:

  • 远程登录协议(Telnet);
  • 文件传送协议(file transfer protocol,FTP),用于从网络下载文件;
  • 简单邮件传送协议(simple mail transfer protocol,SMTP),通过outlook发送邮件;
  • 域名系统(domain name system,DNS),用于通过输入域名访问另一台主机;
  • 简单网络管理协议(simple network management protocol,SNMP);
  • 超文本传送协议(hyperText transfer protocol,HTTP),用于浏览网页;
  • 邮局协议(POP3),用于接收邮件。

传输层

主要功能:为应用层提供会话和数据报通信服务。数据段(segment)是传输层的信息单元。

重要的两个协议有TCP和UDP。

UDPTCP
服务面向无连接面向连接
可靠不可靠可靠
通信多对多点对点
首部8字节20字节
拥塞控制

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;           // 紧急数据偏移量 16bit
    }TCP_HEADER, *PTCP_HEADER;

其中,

数据校验和为防止接收数据为错误数据
确认序列号可以对失序报文进行重排
另外,还存在确认应答机制和重传机制。

UDP

是无连接、不保证可靠的传输层协议,提供一对一或一对多、无连接的不可靠通信服务

其首部,

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

网络层

IP协议

将上层数据报封装成IP数据包后进行传输。如果IP数据包太大,还要对数据包进行分片后再传输,分片数据的重组只会发生在目的端的IP层。

特点

  •  不可靠

        不能保证IP数据包能够成功到达目的地。

  •  无连接

        IP协议每个数据包相互独立,可能不按顺序接数据包。不同的数据包,有不同的路由选择,所以后发的数据包可能比先发的数据包先到达目的地。

  •  无状态

        通信双方不同步传输数据的状态信息,不能处理乱序和重复的IP数据包。另外,IP数据包中的标识字段,用来唯一标识IP数据包,用来处理IP分片和重组,不指示接收顺序。

生存时间,也称存活时间(Time To Live,TTL):表示数据包到达目标地址之前的路由跳数。TTL是由发送端主机设置的一个计数器,每经过一个路由节点就减1,减到为0时,路由就丢弃该数据包,向源端发送ICMP差错报文。防止数据包不断在IP互联网络上永不终止地循环转发。该字段占8比特。

IP地址

每个IP地址分割成网络号(NetID)和主机号(HostID)两部分,网络号表示主机属于互联网中的哪一个网络,而主机号则表示其属于该网络中的哪一台主机。

 另外,存在一些特殊的地址。

广播地址:主机地址全为1;

有限广播地址:所有地址全为1,用于本网广播;

本网地址:网络地址全0,后面的主机号表示本网地址;

回送测试地址:127.X.X.X型,用于网络软件测试及本地机进程间通信;

保留地址:网络号全1和32位全0两种(上图所示主机数量-2的原因)。 

网络掩码

将网络号全部置1,主机号全部置0的,即得到各类地址的网络掩码。

通过将IP地址和网络掩码与运算得到网络地址,从而可以判断不同主机主机是否处于同一网络,网

络地址相同的主机可以直接通信。

ARP协议

用于将IP地址解析为MAC地址。解析过程如下:

(1)本地主机在局域网中广播ARP请求,ARP请求数据帧中包含目的主机的IP地址。

(2)目的主机收到请求报文后,用ARP协议解析这份报文,可以直到是询问其硬件地址。所以发送ARP应答包,里面包含IP地址及其对应的硬件地址。

(3)本地主机收到ARP应答后,知道了目的地址的硬件地址,之后的数据包就可以传送了。同时,会把目的主机的IP地址和MAC地址保存在本机的ARP表中,以后通信直接查找此表即可。

PARP协议

RARP(Reverse Address Resolution Protocol,逆地址解析协议)允许局域网的物理机器从网关服务器的 ARP表或者缓存上请求其IP地址。过程如下:

(1)主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址。

(2)本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址。

(3)如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;如果不存在,RARP服务器对此不做任何响应。

(4)源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通信。如果一直没有收到RARP服务器的响应信息,表示初始化失败。

ICMP协议

用来诊断网络,判断网络是否连通、主机是否可达、路由是否可用等。可分为差错报告报文和查询报文。详情如下:

 举例,如下是请求回显(类型为8)和回显应答(类型为0),wireshark ping包

 

 数据链路层

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

功能:

  • 为网络层提供服务
  • 帧同步、帧定界

       帧同步:接收方能够从二进制比特流中区分出帧的开始和结束。

        帧定界:首部和尾部中含有很多控制信息,它们的一个重要作用就是确定帧的界限。

        透明传输:不管所传数据是什么样的比特组合都能在链路上传输。

  • 差错控制

        在数据通信的过程中,可能会因为网络通信环境或者物理链路等影响当前的数据传输,导致出现误码,为了确保数据通信的准确,使得数据传输的误码率降低。

  • 流量控制

        保证数据通信的有序进行。

        防止休闲接收方来不及接收数据而出现数据丢失的情况。

  • 链路管理

        包括数据链路的建立、链路的维持和释放三个主要方面。

        当网络中的两个结点要进行通信时,数据的发送方必须确知接收方是否已处在准备接收的状态。为此,通信双方必须先要交换一些必要的信息,以建立一条基本的数据链路,在传输数据时要维持数据链路,在通信完毕时释放数据链路。

  • MAC寻址

         网络接口层中的数据通常称为MAC帧,帧所用的地址为媒体设备地址,即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;

名词解释

数据段

        传输层的数据单元。

数据报

        (1)指UDP数据报,面向无连接的数据传输。例如,传输层TCP的分组叫作数据段,UDP的分组叫作数据报。

        (2)指数据包的分组。IP数据包大于MTU值时需要分片,分成的每片数据是一个IP数据报。

数据包

        网络层传输的数据单元,由若干个数据报组成。

数据帧

        数据链路层的传输单元,为网络层传入的数据添加一个头部和尾部,组成帧。

比特流

        是在物理层的介质上直接实现无结构bit流传送的,也就是高低电平信号。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/391640.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于进制的转换

将n进制转化为m进制一般,我们是通过位值定理来将n进制转化为10进制;然后对整数进行辗转相除来得到m进制整数void find(int x){//integer; w0;while(sum>0){ //先除为低; t[w]q[sum%m];w;sum/m;}markw; }for(int ik-1,j0;i>0;i--,j){//i…

Linux操作系统学习(线程基础)

文章目录线程的基础概念线程控制内核LWP和线程ID的关系线程的基础概念 ​ 一般教材对线程描述是:是在进程内部运行的一个分支(执行流),属于进程的一部分,粒度要比进程更加细和轻量化 ​ 一个进程中是可能存在多个线程…

【Java|golang】1653. 使字符串平衡的最少删除次数---动态规划

给你一个字符串 s &#xff0c;它仅包含字符 ‘a’ 和 b’​​​​ 。 你可以删除 s 中任意数目的字符&#xff0c;使得 s 平衡 。当不存在下标对 (i,j) 满足 i < j &#xff0c;且 s[i] ‘b’ 的同时 s[j] ‘a’ &#xff0c;此时认为 s 是 平衡 的。 请你返回使 s 平衡…

亚马逊、速卖通、lazada店铺一直不出单,没流量怎么办?

近几年&#xff0c;跨境电商入驻的卖家越来越多&#xff0c;平台的流量越来越分散&#xff0c;导致店铺没有流量没有订单的情况经常发生&#xff0c;因此卖家对店铺的优化尤为主要。 对于亚马逊卖家来说&#xff0c;几乎每天都会问虽然我把我的产品放在货架上&#xff0c;但没…

4N60-ASEMI高压MOS管4N60

编辑-Z 4N60在TO-220封装里的静态漏极源导通电阻&#xff08;RDS(ON)&#xff09;为2.5Ω&#xff0c;是一款N沟道高压MOS管。4N60的最大脉冲正向电流ISM为16A&#xff0c;零栅极电压漏极电流(IDSS)为1uA&#xff0c;其工作时耐温度范围为-55~150摄氏度。4N60功耗&#xff08;…

Vue基础17之配置代理

Vue基础17配置代理使用node启动两台服务器server1.jsserver2.js使用axios发送ajax请求安装axios库引入axios库发送axios请求App.vue跨域问题解决代理服务器开启&#xff1a;方式一代理服务器开启&#xff1a;方式二server1.jsserver2.jsvue.config.jsApp.vue总结&#xff1a;Vu…

面向对象设计模式:结构型模式之代理模式

一、引入 访问 FB&#xff1a;代理服务器 二、代理模式 aka Surrogate 2.1 Intent 意图 Provide a surrogate (代理) or placeholder for another object to control access to it. 为另一个对象提供一个代理或占位符&#xff0c;以控制对它的访问。代理模式给某一个对象提…

2023年如何在Google做外贸

2023年如何在Google做外贸 答案是&#xff1a;利用谷歌SEO获取自然流量促进成交。 随着全球化和数字化的发展&#xff0c;外贸行业越来越重视互联网的渠道拓展。 在Google搜索引擎上做好SEO优化&#xff0c;是吸引国际客户和提高品牌知名度的关键。 本文将探讨2023年如何在…

【容器运行时】一文理解 OCI、runc、containerd、docker、shim进程、cri、kubelet 之间的关系

参考 docker&#xff0c;containerd&#xff0c;runc&#xff0c;docker-shim 之间的关系Containerd shim 进程 PPID 之谜内核大神教你从 Linux 进程的角度看 DockerRunC 简介OCI和runCContainerd 简介从 docker 到 runCDockershim究竟是什么技术干货&#xff5c;Docker和 Con…

C# 中的abstract和virtual

重新理解了下关键字abstract,做出以下总结&#xff1a; 1.标记为abstract的类不能实例化&#xff0c;但是依然可以有构造函数&#xff0c;也可以重载构造函数&#xff0c;在子类中调用 2.abstract类中可以有abstract标记的方法和属性&#xff0c;也可以没有&#xff0c;被标记…

Linux网络编程学习(网络基础)

文章目录网络基础浅谈计算机网络背景了解协议网络传输基本流程局域网传输基本流程跨网络的数据传输流程网络基础 浅谈计算机网络背景 ​ 计算机最早是没有网络的&#xff0c;当时想要数据之间交互就需要人来传递&#xff0c;但是这样效率非常低&#xff0c;而且也容易出错&am…

机器人姿态规划的三种常见方法:欧拉角、角轴和四元数

参考文献&#xff1a; 1. 布鲁诺西西里安诺等[意] 《机器人学&#xff1a;建模、规划与控制》 2. 四元数小总结 - 孤独の巡礼 - 博客园 (cnblogs.com) 3. 基于单位四元数的姿态插补&#xff08;Matlab&#xff09; - 知乎 (zhihu.com) 4. 基于四元数的工业机器人姿态规划与插…

javaScript基础面试题 --- JS作用域

面试10家公司&#xff0c;得有8家会问到作用域的题。所以说JS的作用域一定要弄清楚&#xff0c;非常重要&#xff01; 1、除了函数之外&#xff0c;JS没有块级作用域 2、作用域链&#xff1a;内部可以访问外部的变量&#xff0c;但是外部不能访问内部变量&#xff0c;如果内部有…

Docker搭建jenkins(Vue自动化部署)

前言 需要提前准备的条件 Docker环境 一、jenkins镜像 # 查询镜像 docker search jenkins# 下载镜像 # lts稳定版 docker pull jenkins/jenkins:lts#查看镜像 docker images二、启动Jenkins容器 创建挂载文件夹&#xff0c;并且进行文件授予权限 #创建文件夹 mkdir -p /home/j…

2023年湖北武汉初级、中级工程师职称评审条件和评审流程是什么呢?

职称分三个级别&#xff1a;初级、中级、高级&#xff0c;原则是需要一级一级的&#xff0c;但是有的地方可以跨级申报。 一、湖北武汉初级、中级工程师职称评定条件&#xff1a; 助理职称评定条件&#xff1a; 1.大学本科毕业&#xff0c;从事专业技术工作1年以上。 2.大学专…

Java Web 实战 02 - 多线程基础篇(1)

Java Web 实战 02 - 多线程基础篇 - 1一 . 认识线程1.1 概念1.1.1 什么是线程?1.1.2 为什么要有多个线程?1.1.3 进程和线程的区别(面试题)1.2 第一个多线程程序1.3 创建线程1.3.1 继承Thread类1.3.2 实现Runnable接口1.3.3 继承 Thread 类 , 使用匿名内部类1.3.4 实现 Runnab…

Linux嵌入式开发 | 汇编驱动LED(1)

文章目录&#x1f697; &#x1f697;Linux嵌入式开发 | 汇编驱动LED&#xff08;1&#xff09;&#x1f697; &#x1f697;初始化IO&#x1f697; &#x1f697;STM32&#x1f697; &#x1f697;使能GPIO时钟&#x1f697; &#x1f697;设置IO复用&#x1f697; &#x1f6…

3.5多线程

一.线程的状态1.NEW安排了工作,还未开始行动把Thread对象创建好了,但是还没有调用startjava内部搞出来的状态,与PCB的状态没什么关系2.TERMINATED工作完成了操作系统的线程执行完毕,销毁了,但是Thread对象还在,获取的对象3.RUNNABLE可以工作的,又可以分为正在工作中和即将开始工…

聊聊内存那些事(基于单片机系统)

单片机的RAM和ROM单片机的ROM&#xff0c;叫只读程序存储器&#xff0c;是FLASH存储器构成的&#xff0c;如U盘就是FLASH存储器。所以&#xff0c;FLASH和ROM是同义的。单片机的程序&#xff0c;就是写到FLASH中了。而RAM是随机读/写存储器&#xff0c;用作数据存储器&#xff…

SpringBoot笔记(一)入门使用

一、为什么用SpringBootSpringBoot优点创建独立Spring应用内嵌web服务器自动starter依赖&#xff0c;简化构建配置自动配置Spring以及第三方功能提供生产级别的监控、健康检查及外部化配置无代码生成、无需编写XMLSpringBoot缺点人称版本帝&#xff0c;迭代快&#xff0c;需要时…