UNIX/Linux网络编程基础:图解TCP/IP协议栈
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了UNIX/Linux网络编程基础:图解TCP/IP协议栈,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2423字,纯文字阅读大概需要4分钟。
内容图文
目录
1、主机到网络层协议:以太网协议
2、IP协议
3、网际控制报文协议(ICMP)
4、传输控制协议(TCP)
5、用户数据报文协议(UDP)
6、地址解析协议ARP
联网的各个终端之间能否进行交互的软件基础是网络协议栈,目前主流的网络协议栈是TCP/IP协议栈。
1、主机到网络层协议:以太网协议
主机到网络层主要为IP协议和ARP协议提供服务、发送和接收网络数据报。本层中由于要实现跨网和跨设备的互通,有很多的实现方式,这里我们只关注以太网的实现方式。
以太网是 由数字设备公司(Digital Equipment Corp,DEC)、英特尔公司和Xerox公司在1982年公布的一个标准。目前TCP/IP技术主要基于以太网标准。以太网标准采用一种带冲突检测的载波监听多路接入(CSMA/CD,Carrier Sense,Multiple Access with Collision Detection)的方法进行传输。以太网的封包格式如下图所示,它在IP数据的基础上增加了共14个字节。
源地址和目的地址:以太网用48bits(6字节)来表示源地址和目的地址。这里的源地址和目的地址指的是硬件地址 ,例如网卡的MAC地址。
在地址后面是两个字节的表示类型的字段,例如0800表示此帧数据为IP数据,0806表示此帧数据为ARP请求。
类型字段之后是数据,对于以太网,规定数据段的大小范围是46-1500个字节,如果数据不足46个字节,则要用空字符填满。
注意:数据段的长度有一个最大值,以太网为1500,这个特性称为MTU,即最大传输单元。如果IP层有一个要求传送的数据长度比MTU大,那么在IP层要对数据进行分片,使得每个片都小于MTU。
CRC字段用于对帧内数据进行校验,以保证数据的正确性,通常由硬件实现(例如在网卡设备中实现)。
注意:以太网的头部长度为14的特点在某些平台的实现上会造成效率上的问题,例如4字节对齐的平台,在取得IP数据时通常会重新复制一次。
2、IP协议
IP协议是TCP/IP协议中最重要的协议,它为TCP、UDP、ICMP等协议提供传输的通路。IP层的主要目的是提供子网的互联,形成较大的网络,使不同的子网间能够传输数据。IP层主要有如下作用:
IP数据的格式如下图所示,不包含选项字段,其头部长度为20字节。
源IP地址和目的IP地址:源地址表示发送数据的主机或设备的IP地址,目的地址表示接收数据的主机IP地址。这两个字段均为32位 。本字段的目的在于识别Internet上的主机。
3、网际控制报文协议(ICMP)
ICMP协议用于传递差错信息、时间、回显、网络信息等报文控制数据。
ICMP协议的数据位于IP字段的数据部分,它是在IP报文的内部被传送的。
ICMP报文的数据格式如下图所示:
ICMP的报文类型由类型和代码两个字段共同决定。
4、传输控制协议(TCP)
传输控制协议(Transmission Control Protocol),简称TCP协议,它在原有IP协议的基础上,增加了确认重发、滑动窗口和复用/解复用等机制,提供一种可靠的、面向连接的、字节流服务。
TCP的特点:
TCP的数据格式:
源端口号和目的端口号:这两个字段均为16位的长度,表示发送端和接收端的端口,用于确认发送端和接收端的应用程序。 发送端的IP地址和端口号以及接收端的IP地址和端口号可以确认一个在Internet上的TCP连接。
建立连接的三次握手:
释放TCP连接的四次握手:
TCP的封装解封过程:
5、用户数据报文协议(UDP)
UDP是一种基于IP协议的无连接、不可靠网络传输协议。
UDP协议把应用程序需要传递的数据发送出去,不提供发送数据包的顺序;接收方不向发送方发送接收的确认信息,如果 出现丢包或者重包的现象,也不会向发送方发送反馈,因此不能保证使用UDP协议的程序发送的数据一定到达了接收方或者到达接收方的数据顺序和发送方的一致性。
使用UDP协议传输数据的应用程序,必须自己构建发送数据的顺序机制和发送接收的确认机制,以此来保证发送数据的正确到达,保证接收数据的顺序与发送数据的一致性,也就是说应用程序必须根据UDP的缺点提供解决方案。
UDP协议相对于TCP协议执行时的速度要比TCP快得多 ,因为UDP协议简单的多,对系统造成的负载低。
UDP的数据格式:
源端口号和目的端口 号分别是一个16位的字段,用来表示发送方和接收方的UDP端口。
UDP数据的传输过程:
6、地址解析协议ARP
在以以太网为基础的局域网中,每个网络接口都有一个硬件地址,这是一个48bit的值,用来标识不同的以太网设备,在局域网中必须知道网络设备的硬件地址才能向目的主机发送数据。而在网际网中数据传输的目的地址是IP地址,数据要能够正确地传输,必须建立IP地址和硬件地址的对应关系,ARP协议就是起这种作用的。
ARP协议为IP地址到硬件地址提供动态的映射关系。ARP高速缓存维持这种映射关系,其中存放了最近IP地址到硬件地址的映射记录,高速缓存中的每项记录的生存时间为20分钟,开始时间从映射关系建立时算起。
可以用arp -a命令查看ARP高速缓存。
ARP分组数据格式:
ARP协议的实现方式是在以太网上做广播,查询目的IP地址,接收到ARP请求的主机响应请求方,将本机的MAC地址反馈给请求的主机。
ARP请求应答的操作方式很简单,将接受到的数据字段的发送方和接收方的值对调,将所有本机的硬件地址和IP地址的值填充到合适的发送方位置。
原文:http://www.cnblogs.com/nufangrensheng/p/3582617.html
内容总结
以上是互联网集市为您收集整理的UNIX/Linux网络编程基础:图解TCP/IP协议栈全部内容,希望文章能够帮你解决UNIX/Linux网络编程基础:图解TCP/IP协议栈所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。