上一页 1 ··· 13 14 15 16 17 18 19 20 21 ··· 30 下一页
摘要: 创建socket时会创建传输控制块,之后调用初始化函数对控制块进行初始化,其中包括对定时器的初始化,tcp会调用tcp_init_xmit_timers函数来初始化这些定时器,本文将详细分析tcp_init_xmit_timers函数; 下面为这种情况的函数调用关系: 1 /** 2 * inet_ 阅读全文
posted @ 2019-10-27 22:10 AlexAlex 阅读(623) 评论(0) 推荐(0) 编辑
摘要: TCP首部图 TCP首部说明 源端口,目的端口 用于寻找发送端和接收端应用进程。(源IP,源端口,目的IP,目的端口) 四元组确定唯一一个TCP连接;(IP,端口)也称为一个插口(socket); 序号 标识从TCP发送端向TCP接收端发送的数据字节流,它标识在当前传输报文段中的第一个数据字节;需要 阅读全文
posted @ 2019-10-27 22:08 AlexAlex 阅读(1376) 评论(0) 推荐(0) 编辑
摘要: 前提: A:主动关闭; B:被动关闭; A执行主动关闭,发送FIN,B收到FIN,发送ACK,进入CLOSE_WAIT,B发送FIN,进入LAST_ACK等待最后一个ACK到来; 关闭方式: (1) 收到A发送回来的ACK进入CLOSED状态; (2) 未收到A发送回来的ACK,重传FIN,此时A处 阅读全文
posted @ 2019-10-27 22:06 AlexAlex 阅读(6141) 评论(0) 推荐(0) 编辑
摘要: 传输控制块是一个分层的填充结构,每一个层次都增加一些字段,来表示一个通用的控制,它们都是结构中的第一个结构,可以直接从头部直接转换成对应的控制块;如:tcp控制块的tcp_sock的使用slab分配,其大小为整个tcp_sock结构的大小,在下层用不到上层tcp相关属性的时候,只取其中的某个部分即可 阅读全文
posted @ 2019-10-27 22:05 AlexAlex 阅读(533) 评论(0) 推荐(0) 编辑
摘要: getsockname-获取本地地址;比如,在绑定的时候设置端口号为0由系统自动选择端口绑定,或者使用了INADDR_ANY通配所有地址的情况下,后面需要用到具体的地址和端口,就可以用getsockname获取地址信息; getpeername-获取建立连接的对端的地址和端口; 下面为源码分析: 1 阅读全文
posted @ 2019-10-27 22:04 AlexAlex 阅读(1118) 评论(0) 推荐(0) 编辑
摘要: 函数原型 read/write系原型 1 #include <unistd.h> 2 3 ssize_t read(int fd, void *buf, size_t count); 1 #include <unistd.h> 2 3 ssize_t write(int fd, const void 阅读全文
posted @ 2019-10-27 22:03 AlexAlex 阅读(1136) 评论(0) 推荐(0) 编辑
摘要: recvmsg系统调用允许用户指定msghdr结构来接收数据,可以将数据接收到多个缓冲区中,并且可以接收控制信息;接收信息过程与其他接收系统调用核心一致,都是调用传输层的接收函数进行数据接收; 1 SYSCALL_DEFINE3(recvmsg, int, fd, struct user_msghd 阅读全文
posted @ 2019-10-27 21:57 AlexAlex 阅读(3063) 评论(0) 推荐(0) 编辑
摘要: recv系统调用对sys_recvfrom进行了简单的封装,只是其中不包含地址信息,其只需要从建立连接的另一端接收信息; 1 /* 2 * Receive a datagram from a socket. 3 */ 4 5 SYSCALL_DEFINE4(recv, int, fd, void _ 阅读全文
posted @ 2019-10-27 21:56 AlexAlex 阅读(666) 评论(0) 推荐(1) 编辑
摘要: recvfrom系统调用通过用户传入的接收空间构造msghdr,并且调用sock_recvmsg,该函数调用socket操作的recvmsg函数sock->ops->recvmsg,ipv4对应的是inet_recvmsg,该函数调用传输层的sk->sk_prot->recvmsg来接收数据,如tc 阅读全文
posted @ 2019-10-27 21:55 AlexAlex 阅读(1207) 评论(0) 推荐(0) 编辑
摘要: sendmsg系统调用允许在用户空间构造消息头和控制信息,用此函数可以发送多个数据缓冲区的数据,并支持控制信息;当调用进入内核后,会将用户端的user_msghdr对应拷贝到内核的msghdr中,然后进行数据发送; 1 SYSCALL_DEFINE3(sendmsg, int, fd, struct 阅读全文
posted @ 2019-10-27 21:54 AlexAlex 阅读(3185) 评论(0) 推荐(0) 编辑
上一页 1 ··· 13 14 15 16 17 18 19 20 21 ··· 30 下一页