TCPIP在linux下的具体实现-Read.doc
TCP/IP在linux下的具体实现(初稿,未整理)
Liuxs28@163.com2005-2-25
目录 TOC \o "1-3" \h \z
HYPERLINK \l "_To TCP/IP在linux下的具体实现(初稿,未整理) PAGEREF _To\h 1
HYPERLINK \l "_To 目录 PAGEREF _To\h 1
HYPERLINK \l "_To 1 通用TCP/IP逻辑结构; PAGEREF _To\h 1
HYPERLINK \l "_To 2 .TCP/IP协议栈在linux下的层次 PAGEREF _To\h 2
HYPERLINK \l "_To 2.2跟实现tcp/ip有关的linux基础知识: PAGEREF _To\h 2
HYPERLINK \l "_To 2.3 各层之间的关系; PAGEREF _To\h 5
HYPERLINK \l "_To 3基本数据结构 PAGEREF _To\h 6
HYPERLINK \l "_To 3.1 msghdr结构 PAGEREF _To\h 6
HYPERLINK \l "_To 3.2.sk_buff_head{}结构 PAGEREF _To\h 6
HYPERLINK \l "_To 3 .3socket{}类型; PAGEREF _To\h 9
HYPERLINK \l "_To 3.4.INET Socket: sock{} PAGEREF _To\h 10
HYPERLINK \l "_To 3.5以上个结构的跳转及函数指针集合. PAGEREF _To\h 14
HYPERLINK \l "_To 3.6 struct net_device{ PAGEREF _To\h 14
HYPERLINK \l "_To 4实例:收发数据包流程图 PAGEREF _To\h 14
HYPERLINK \l "_To 4.2数据接收过程:以下以图表说明(大致原理类似接受过程): PAGEREF _To\h 16
1 通用TCP/IP逻辑结构;
与ISO提出的OSI定义网络层次(7层)不同,tcp/ip就定义了五层.
应用层传输层网络层数据链路层物理层
应用层
传输层
网络层
数据链路层
物理层
应用层
应用层
BSD Socket
Inet socket(tcp/udp)
IP 层
数据链路层
物理层
各层的主要功能及对应的硬件:
物理层:定义传输的电平及硬件接口标准..
数据链路层:对应的是网卡芯片内部程序,用于在ip包前加上相应的frame信息.
可想想成在网卡芯片里有一个进程在干这件事情.直接跟网卡驱动打交道.
网络层:用来路由,数据包分片,负责把一个包发到指定的网络号.;
传输层:把收到的包传给具体的进程(根据端口号)等,及数据包传输控制,重发,检测功能;
应用层:把有用的数据进行重新组装,定义要传输的端口等等;
2 .TCP/IP协议栈在linux下的层次
LINUX下tcp/ip协议栈是以4.4 BSD为模板,估计目前大多数操作系统以此为模板,稍加改动,支持BSD Socket 编程模型;
在服务器端:
调用socket()创建一个socket;
bind()
listen()
accept();
read/write()
在客户端
socket();
connect();
read/write();
2.2跟实现tcp/ip有关的linux基础知识:
在linux下,所有的设备都当作文件节点来管理,网络设备也不例外,即对一个进程中的socket进行读写就相当于对进程中的已打开的文件读写,具体的不同体现在读写函数的不同;
一下简单介绍一下看看进程,文件系统及socket之间的关系;
进程数据结构://只关心跟文件有关的那部分
struct task_struct {
…