文件名称:Linux Networking Subsystem
文件大小:351KB
文件格式:PDF
更新时间:2012-03-14 05:47:12
Linux Network
1 Introduction 1 1.1 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Document Conventions . . . . . . . . . . . . . . . . . . . . . . 1 1.3 Sample Network Example . . . . . . . . . . . . . . . . . . . . 1 2 Initialization 3 2.1 Function do basic setup() . . . . . . . . . . . . . . . . . . . . 3 2.2 Function sock init() . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2.1 Function sk init() . . . . . . . . . . . . . . . . . . . . . 8 2.2.2 Function skb init() . . . . . . . . . . . . . . . . . . . . 10 2.2.2.1 union skb head pool . . . . . . . . . . . . . . 11 2.2.2.2 Function skb queue head init() . . . . . . . . 11 2.2.2.3 struct sk bu? head . . . . . . . . . . . . . . . 11 2.2.3 Function wanrouter init() . . . . . . . . . . . . . . . . 12 2.2.3.1 Function wanrouter proc init() . . . . . . . . 12 2.2.3.2 Function sdladrv init() . . . . . . . . . . . . . 12 2.2.3.3 wanpipe init() . . . . . . . . . . . . . . . . . 12 2.2.4 Netlink sockets . . . . . . . . . . . . . . . . . . . . . . 12 2.2.5 Function rtnetlink init() . . . . . . . . . . . . . . . . . 12 2.2.5.1 Function netlink kernel create() . . . . . . . . 13 2.2.5.2 Function register netdevice notifier() . . . . . 13 2.2.6 Function init netlink() . . . . . . . . . . . . . . . . . . 13 2.2.7 Function netfilter init() . . . . . . . . . . . . . . . . . . 15 2.2.8 Function bluez init() . . . . . . . . . . . . . . . . . . . 15 2.3 Function do initcalls() . . . . . . . . . . . . . . . . . . . . . . 16 2.4 Function netlink proto init() . . . . . . . . . . . . . . . . . . . 16 2.5 Function inet init() . . . . . . . . . . . . . . . . . . . . . . . . 17 2.5.1 Function sock register() . . . . . . . . . . . . . . . . . 22 2.5.1.1 struct net proto family . . . . . . . . . . . . . 23 iii iv CONTENTS 2.5.2 Adding INET Protocols . . . . . . . . . . . . . . . . . 24 2.5.2.1 struct inet protocol . . . . . . . . . . . . . . . 24 2.5.2.2 Function inet add protocol() . . . . . . . . . . 26 2.5.3 Register Socket Interfaces . . . . . . . . . . . . . . . . 28 2.5.3.1 struct inet protosw . . . . . . . . . . . . . . . 28 2.5.3.2 struct proto . . . . . . . . . . . . . . . . . . . 29 2.5.3.3 struct proto ops . . . . . . . . . . . . . . . . 31 2.5.3.4 Array inetsw array . . . . . . . . . . . . . . . 33 2.5.3.5 Function inet register protosw(..) . . . . . . . 36 2.5.4 Initializing Protocols . . . . . . . . . . . . . . . . . . . 36 2.5.4.1 struct packet type . . . . . . . . . . . . . . . 36 2.5.4.2 Function dev add pack() . . . . . . . . . . . . 37 2.5.5 Function arp init() . . . . . . . . . . . . . . . . . . . . 39 2.5.5.1 arp packet type . . . . . . . . . . . . . . . . . 39 2.5.5.2 Function neigh table init(..) . . . . . . . . . . 40 2.5.5.3 Function neigh sysctl register(..) . . . . . . . 40 2.5.6 Function ip init() . . . . . . . . . . . . . . . . . . . . . 40 2.5.6.1 ip packet type . . . . . . . . . . . . . . . . . 41 2.5.6.2 Function ip rt init() . . . . . . . . . . . . . . 41 2.5.6.3 Function inet initpeers() . . . . . . . . . . . . 43 2.5.7 Function tcp v4 init(..) . . . . . . . . . . . . . . . . . . 44 2.5.8 Function tcp init() . . . . . . . . . . . . . . . . . . . . 46 2.5.8.1 Function tcpdiag init() . . . . . . . . . . . . . 50 2.5.9 Function icmp init(..) . . . . . . . . . . . . . . . . . . . 51 2.5.10 Function ipip init() . . . . . . . . . . . . . . . . . . . . 53 2.5.11 Function ipgre init() . . . . . . . . . . . . . . . . . . . 53 2.5.12 Function ip mr init() . . . . . . . . . . . . . . . . . . . 54 2.6 Function af unix init() . . . . . . . . . . . . . . . . . . . . . . 54 2.7 Function packet init() . . . . . . . . . . . . . . . . . . . . . . 56 2.7.0.1 Function register netdevice notifier(..) . . . . 57 2.7.0.2 struct notifier block . . . . . . . . . . . . . . 57 3 BSD Sockets 59 3.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 4 INET Sockets 61 4.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 5 Transport Layer 63 5.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 CONTENTS v 6 Network Layer 65 6.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 7 Syscall Trace 67 7.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 7.2 Socket structres . . . . . . . . . . . . . . . . . . . . . . . . . . 67 7.3 Syscalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 7.3.1 Establishing Connection . . . . . . . . . . . . . . . . . 67 7.3.2 socket creation . . . . . . . . . . . . . . . . . . . . . . 67 7.3.3 bind walkthrough . . . . . . . . . . . . . . . . . . . . . 67 7.3.4 listen walkthrough . . . . . . . . . . . . . . . . . . . . 67 7.3.5 accept walkthrough . . . . . . . . . . . . . . . . . . . . 67 7.3.6 connect walkthrough . . . . . . . . . . . . . . . . . . . 67 7.3.7 close walkthrough . . . . . . . . . . . . . . . . . . . . . 67 7.4 Linux Functions . . . . . . . . . . . . . . . . . . . . . . . . . . 67 8 Receiving Messages 69 8.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 8.2 Receiving Walkthrough . . . . . . . . . . . . . . . . . . . . . . 69 8.2.1 Reading from a socket - I . . . . . . . . . . . . . . . . . 69 8.2.2 Receiving a Packet . . . . . . . . . . . . . . . . . . . . 69 8.2.3 SoftIRQ - net rx action . . . . . . . . . . . . . . . . . . 69 8.2.4 Unwrapping Packet in IP . . . . . . . . . . . . . . . . . 69 8.2.5 Accepting a Packet in UDP . . . . . . . . . . . . . . . 69 8.2.6 Accepting a Packet in TCP . . . . . . . . . . . . . . . 69 8.2.7 Reading from a Socket - II . . . . . . . . . . . . . . . . 69 8.3 Linux Functions . . . . . . . . . . . . . . . . . . . . . . . . . . 69 9 Sending Messages 71 9.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 9.2 Sending Walkthrough . . . . . . . . . . . . . . . . . . . . . . . 71 9.2.1 Writing to a socket . . . . . . . . . . . . . . . . . . . . 71 9.2.2 Creating a Packet with UDP . . . . . . . . . . . . . . . 71 9.2.3 Creating a Packet with TCP . . . . . . . . . . . . . . . 71 9.2.4 Wrapping a Packet in IP . . . . . . . . . . . . . . . . . 71 9.2.5 Transmitting a Packet . . . . . . . . . . . . . . . . . . 71 9.3 Linux Functions . . . . . . . . . . . . . . . . . . . . . . . . . . 71 10 IP Routing 73 10.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 vi CONTENTS 11 IP Forwarding 75 11.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 12 Netfilter 77 12.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 GNU Free Document License 79 Bibliography 81