linux网络编程之TCP/IP基础(一) TCP/IP协议栈与数据包封装

一、ISO/OSI参考模型

OSI(open system interconnection)开放系统互联模型是由ISO(International Organization for Standardization)国际标准化组织定义的网络分层模型,共七层,如下图。

物理层(Physical Layer):物 理层定义了所有电子及物理设备的规范,为上层的传输提供了一个物理介质,本层中数据传输的单位为比特(bit)。属于 本层定义的规范有EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等,实际使用中的设备如网卡等属于本层。

数据链路层(Data Link Layer):对物理层收到的比特流进行数据成帧。提供可靠的数据传输服务,实现无差错数据传 输。在数据

链路层中数据的单位为帧(frame)。属于本层定义的规范有SDLC、HDLC、PPP、STP、帧中继等,实际使 用中的设备如switch交换机属于本层。

网络层(Network Layer):网络层负责将各个子网之间的数据进行路由选择 ,分组与重组。本层中数据传输的单位为数据包(packet)。属于本层定义的规范有IP、IPX、RIP、OSPF、ICMP、IGMP等。 实际使用中的设备如路由器属于本层。

传输层(Transport Layer):提供可靠的数据传输服务,它检测路由器丢弃 的包,然后产生一个重传请求,能够将乱序收到的数据包重新排序。在传输层数据的传输单位是段(segment)。

会 话层(Session Layer):管理主机之间会话过程,包括会话建立、终止和会话过程中的管理。

表示层 (Presentation Layer):表示层对网络传输的数据进行变换,使得多个主机之间传送的信息能够互相理解,包括数据的压 缩、加密、格式转换等。

应用层(Application Layer):应用层与应用程序界面沟通,以达至展示给用户的目的。 在此常见的协定有: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等

二、TCP/IP协议四层模型

TCP/IP网络 协议栈分为应用层(Application)、传输层(Transport)、网络层(Network)和链路层(Link)四层。如下图所示,如 果没有特别说明,一般引用的图都出自《TCP/IP详解》。

时间: 2024-07-30 20:21:41

linux网络编程之TCP/IP基础(一) TCP/IP协议栈与数据包封装的相关文章

linux网络编程之socket(五) tcp流协议产生的粘包问题和解决方案

我们在前面曾经说过,发送端可以是一K一K地发送数据,而接收端的应用程序可以两K两K地提走数据,当然也有可能一 次提走3K或6K数据,或者一次只提走几个字节的数据,也就是说,应用程序所看到的数据是一个整体,或说是一个流 (stream),在底层通讯中这些数据可能被拆成很多数据包来发送,但是一个数据包有多少字节对应用程序是不可见的,因 此TCP协议是面向流的协议,这也是容易出现粘包问题的原因.而UDP是面向消息的协议,每个UDP段都是一条消息,应用程 序必须以消息为单位提取数据,不能一次提取任意字节

linux 网络编程之TIME_WAIT状态

                                                         Linux 网络编程之TIME_WAIT状态                                                               刚刚开始看TCP socket的4次握手终止流程图的时候,对于最后的TIME_WAIT状态不是很理解.现在在回过头来研究,发现TIME_WAIT状态是一个很微妙状态.之所以设计TIME_WAIT状态的原因有2个原因:

Linux网络编程之UDP Socket程序示例_C 语言

在网络传输协议中,TCP协议提供的是一种可靠的,复杂的,面向连接的数据流(SOCK_STREAM)传输服务,它通过三段式握手过程建立连接.TCP有一种"重传确认"机制,即接收端收到数据后要发出一个肯定确认的信号,发送端如果收到接收端肯定确认的信号,就会继续发送其他的数据,如果没有,它就会重新发送. 相对而言,UDP协议则是一种无连接的,不可靠的数据报(SOCK_DGRAM)传输服务.使用UDP套接口不用建立连接,服务端在调用socket()生成一个套接字并调用bind()绑定端口后就可

linux网络编程之TCP/IP基础(五) 分析一帧基于UDP的TFTP协议帧

下图是UDP的段格式: 相比TCP段格式,UDP要简单得多,也没啥好 说的,需要注意的是UDP数据长度指payload加上首部的长度. 下面分析一帧基于UDP的TFTP协议帧: 以太网 首部 0000: 00 05 5d 67 d0 b1 00 05 5d 61 58 a8 08 00 IP首部 0000: 45 00 0010: 00 53 93 25 00 00 80 11 25 ec c0 a8 00 37 c0 a8 0020: 00 01 UDP首部 0020: 05 d4 00 45

linux网络编程之TCP/IP基础(四) TCP连接的建立和断开、滑动窗口

一.TCP段格式: TCP的段格式如下图所示 源端口号与目的端口号 源端口号和目的端口号,加上IP首部的源IP地址和目的IP地址唯一确定一个TCP连接. 序号 序号表示在这个报文段中的第一个数据字节序号. 确认号 仅当ACK标志为1时有效.确认号表示期望收到 的下一个字节的序号. 头部长度 4位,TCP头部最多60个字节,最少20个字节 保留位 6位,必须为 0 6个标志位 URG-紧急指针有效 ACK-确认序号有效 PSH-接收方应尽快将这个报文段交给应用层 RST- 连接重置 SYN-同步序

linux网络编程之TCP/IP基础(三) IP数据报格式和IP地址路由

一.IP数据报格式 IP数据报格式如下: 版本 IP协议版本号,长度为4位,IPv4此 字段值为4,IPv6此字段值为6 首部长度 以32位的字为单位,该字段长度为4位,最小值为5,即不带任何选项的IP 首部20个字节:最大值为15,所以首部长度最大为60个字节 服务类型(TOS) 长度为8位.此字段包含3位的优先 权(现已忽略),4位的服务类型子字段和1位的保留位(必须置0).4位的服务类型分别为最小延迟(D).最大吞吐量(T ).最高可靠性(R).最小费用(F),如下图. 总长度 该字段长度

linux网络编程之TCP/IP基础(二) 利用ARP和ICMP协议解释ping命令

一.MTU 以太网和IEEE 802.3对数据帧的长度都有限制,其最大值分别是1500和1492字节,将这个限制称作最大 传输单元(MTU,Maximum Transmission Unit) 如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大, 那么IP层就要进行分片(Fragmentation),把数据报分成若干片,这样每一片都小于MTU. 当网络上的两台主机互相 进行通信时,两台主机之间要经过多个网络,每个网络的链路层可能有不同的MTU,其中两台通信主机路径中的最小MTU被称

Linux网络编程之TCP协议

server.c: #include <stdlib.h>  #include <stdio.h>  #include <errno.h>  #include <string.h>  #include <netdb.h>  #include <sys/types.h>  #include <netinet/in.h>  #include <sys/socket.h>  #define portnumber 88

linux网络编程之socket(十五) UNIX域套接字编程和socketpair 函数

一.UNIX Domain Socket IPC socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机 制,就是UNIX Domain Socket.虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是 UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包.计算校验和.维护序号和应答等,只是 将应用层数据从一个进程拷贝到另一个进程.UNIX域套接字与TCP套接字相比较,