WEB开发网
开发学院软件开发Java tcp connection setup的实现(一) 阅读

tcp connection setup的实现(一)

 2009-09-10 00:00:00 来源:WEB开发网   
核心提示: 最后来看下request_sock,它保存了tcp双方传输所必需的一些域,比如窗口大小,对端速率,对端数据包序列号等等这些值. Java代码structrequest_sock{structrequest_sock*dl_next;/*Mustbefirstmember!*////mss值.u1

最后来看下request_sock,它保存了tcp双方传输所必需的一些域,比如窗口大小,对端速率,对端数据包序列号等等这些值.

Java代码  

struct request_sock { 
 struct request_sock *dl_next; /* Must be first member! */ 
///mss值. 
 u16  mss; 
 u8  retrans; 
 u8  cookie_ts; /* syncookie: encode tcpopts in timestamp */ 
 /* The following two fields can be easily recomputed I think -AK */ 
 u32  window_clamp; /* window clamp at creation time */ 
///窗口大小. 
 u32  rcv_wnd;  /* rcv_wnd offered first time */ 
 u32  ts_recent; 
 unsigned long  expires; 
///这个域包含了发送ack的操作集合. 
 const struct request_sock_ops *rsk_ops; 
 struct sock  *sk; 
 u32  secid; 
 u32  peer_secid; 
};

listen的对应的系统调用是sys_listen,它首先通过sockfd_lookup_light查找到相应的socket,然后调用inet_listen,大体流程和bind差不多,只不过中间调用的是inet_listen罢了.

这里还有一个概念那就是backlog,在linux中,backlog的大小指的是已完成连接队列的大小.而不是和半连接队列之和.而半开连接的大小一般是和backlog差不多大小.

而半开连接队列的最大长度是根据backlog计算的,我们后面会介绍这个.

因此我们直接来看inet_listen的实现,这个函数主要是进行一些合法性判断,然后调用inet_csk_listen_start来对相关域进行处理:

Java代码   

上一页  2 3 4 5 6 7 8 9  下一页

Tags:tcp connection setup

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接