热门标签 | 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流传送的,也就是高低电平信号。


推荐阅读
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社区 版权所有