传输层协议-TCP总结

 

TCP的文章参考下面链接

  1. TCP连接的建立和终止
  2. TCP的数据交互
  3. TCP的keepalive
  4. TCP的超时和重传
  5. TCP的未来和性能

 

TCP创建连接的函数调用过程

 

 

每个进程都有一个 task_struct的数据结构,里面有一个指向文件描述符的数组
通过这个文件描述符,可以找到这个进程打开的socket句柄
通过fd可以找到socket的inode,这个inode跟文件系统不一样,是保存在内存中的
最后可以找到struct socket这个结构体
这个结构体关联了发送队列,接收队列

 

UDP程序的调用过程

 

 

处理多任务的方式

1.多进程方式

父进程得到socket句柄后通过fork创建子进程,子进程得到跟父进程一样的内存拷贝
子进程因为有同样的内存,fd也是一样的,所以可以去操作socket句柄,直接业务逻辑
下图父进程通过fork调用,转到内核态,然后访问中断向量表,找到对应的中断号
执行sys_fork,复制父进程的内存到子进程中

 

 

2.多线程方式

通过phread_create创建新线程
多个线程共享相同的fd,和其他数据结构

 

3.多路复用

多线程可以提高效率,但是也会出现链接太多的问题
多路复用select就是为了解决这个问题的
某个线程查看每个socket的fd,当有变化时就设置fd_set对应的位置为1,表示socket可读或者可写,从而转给业务线程去处理

 

4.事件通知方式
事件通知就是epoll模型,select的方式当文件描述符有变化时需要轮询遍历一遍,文件一多效率就低了,因而使用select受到FD_SETSIZE的限制
改成事件通知方法,就会好很多,这是通过注册callback函数完成的
epoll_create创建了一个epoll对象,epoll对象内部维护了一个红黑树,然后socket句柄会添加到这个红黑树中
当有事件发生后就会从红黑树中得到socket然后调用callback函数
epoll的这种方式使得监听的socket数据非常多,而且效率也不会下降
epoll也被称为解决C10K问题的利器

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值