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


推荐阅读
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 如何使用专业软件打开和编辑PHP电影文件?
    如何使用专业软件打开和编辑PHP电影文件? ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 考前准备方面,我的考试时间安排在上午11点至12点,只需提前20分钟到达考场的接待休息区即可。由于我居住在福田区,交通便利,可以选择多种方式前往考场。为了确保顺利通过考试,我建议考生提前熟悉考试流程和环境,并合理规划出行时间,以保持良好的心态和状态。此外,考前复习应注重理论与实践相结合,多做模拟题,加强对重点知识点的理解和掌握。 ... [详细]
  • C#中实现高效UDP数据传输技术
    C#中实现高效UDP数据传输技术 ... [详细]
  • 本文提供了 RabbitMQ 3.7 的快速上手指南,详细介绍了环境搭建、生产者和消费者的配置与使用。通过官方教程的指引,读者可以轻松完成初步测试和实践,快速掌握 RabbitMQ 的核心功能和基本操作。 ... [详细]
  • PyQt5 QTextEdit:深入解析Python中多功能GUI库的应用与实现
    本文详细探讨了 PyQt5 中 QTextEdit 组件在 Python 多功能 GUI 库中的应用与实现。PyQt5 是 Qt 框架的 Python 绑定,提供了超过 620 个类和 6000 个函数及方法,广泛应用于跨平台应用程序开发。QTextEdit 作为其中的重要组件,支持丰富的文本编辑功能,如富文本格式、文本高亮和自定义样式等。PyQt5 的流行性不仅在于其强大的功能,还在于其易用性和灵活性,使其成为开发复杂用户界面的理想选择。 ... [详细]
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社区 版权所有