热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

目录全称定义分层结构

目录

全称

定义

分层结构

端到端的数据传输

​编辑

举个栗子——浏览网页

应用层

传输层

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; // 源端口号 16bitshort sDestPort; // 目的端口号 16bitunsigned int uiSequNum; // 序列号 32bitunsigned int uiAcknowledgeNum; // 确认号 32bitshort sHeaderLenAndFlag; // 前 4位:TCP头长度;中 6位:保留;后 6位:标志位short sWindowSize; // 窗口大小 16bitshort sCheckSum; // 检验和 16bitshort surgentPointer; // 紧急数据偏移量 16bit}TCP_HEADER, *PTCP_HEADER;

其中,

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

UDP

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

其首部,

typedef struct _UDP_HEADER // UDP头定义,共8个字节{unsigned short m_usSourPort; // 源端口号16bitunsigned short m_usDestPort; // 目的端口号16bitunsigned short m_usLength; // 数据包长度16bitunsigned 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流传送的,也就是高低电平信号。


推荐阅读
  • socket网络编程之TCP、UDP
    之前说的用于进程间通信的几种方式:消息signal、管道pipe、消息队列msg、共享内存shm、信号量sem。都只适用于一台主机上的进程间通信,那么如何 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • c# java socketn 字节流_C#Socket编程详解(一)TCP与UDP简介
    一、TCP与UDP(转载)1、TCP1.1定义TCP(TransmissionControlProtocol)传输控制协议。是一种可靠的、面向连接的协议(eg:打电话)、传输效率低 ... [详细]
  • OSI七层模型、TCP/IP五层模型
    OSI网络互连的七层框架:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层;应用层OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,为用户直接提供各种网 ... [详细]
  • 适合小型网络环境的免费网络管理软件Intermapper
    InterMapper网络管理软件可支持监测5台以内的网络设备,特别适合安装使用在小型网络环境,可以实时了解网络运行状态和网络拓扑,支持多 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • IP双栈环境下网络应用迁移
    IPv4向IPv6迁移有多种途径,在选择具体的迁移方式时,当前环境中运行的应用是否支持IPv6是重要的考量因素之一,同时在编写新的应用时,需要考虑新编写的应用不仅可以适应当前主流的IPv4环境, ... [详细]
  • 邮件服务在网络里的角色是越来越重要,不管是因特网上还是在局域网内部,用户都习惯使用电子邮件来处理日常的工作。而越来越多的企业和单位,也都急切希望能拥有自己的内部邮件服务器,以加强员 ... [详细]
  • Microsoft Dynamics CRM 2013 电子邮件路由器安装程序 介绍
    要安装电子邮件路由器和规则部署向导,运行MicrosoftDynamicsCRM电子邮件路由器安装程序.若要安装电子邮件路由器和规则部署向导,请按照本节 ... [详细]
author-avatar
放肆情人800
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有