![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
TCP/IP
文章平均质量分 94
TCP/IP知识
Yi Ian
这个作者很懒,什么都没留下…
展开
-
TCP连接中客户端的端口号是如何确定的?
在 TCP 连接中,客户端在发起连接请求前会先确定一个客户端端口,然后用这个端口去和服务器端进行握手建立连接。那么在 Linux 上,客户端的端口到底是如何被确定下来的呢?事实上很多我们平时遇到的问题都和这个端口选择过程相关,如果能深度理解这个过程,将有助于我们对这些问题的深刻理解。Cannot assign requested address 报错是怎么回事?一个客户端端口可以同时用在两条 TCP 连接上吗?还是让我们借助一段简单到只有两句的代码,从这个来讲起!转载 2022-10-02 18:30:00 · 2712 阅读 · 0 评论 -
为什么服务端程序都需要先 listen 一下
icsk->icsk_accept_queue 定义在 inet_connection_sock 下,是一个 request_sock_queue 类型的对象。是内核用来接收客户端请求的主要数据结构。我们平时说的全连接队列、半连接队列全部都是在这个数据结构里实现的。我们来看具体的代码。*/......}我们再来查找到 request_sock_queue 的定义,如下。//全连接队列//半连接队列......};转载 2022-10-04 19:30:00 · 240 阅读 · 0 评论 -
TCP协议的可靠传输原理
从上面的和中,我们都知道TCP是可靠的传输协议,那么TCP协议是怎么样保证可靠性呢?其实要实现可靠性就是要解决等问题?要解决这些基本问题主要是通过TCP协议的等机制实现。原创 2022-09-26 19:00:00 · 1176 阅读 · 0 评论 -
深入理解Linux 网络包发送过程
所以内核的做法就是每次调用网卡发送的时候,实际上传递出去的是 skb 的一个拷贝。对于上小节函数中,当满足真正发送条件的时候,无论调用的是 __tcp_push_pending_frames 还是 tcp_push_one 最终都实际会执行到 tcp_write_xmit。在上面 __igb_open 函数调用 igb_setup_all_tx_resources 分配所有的传输 RingBuffer, 调用 igb_setup_all_rx_resources 创建所有的接收 RingBuffer。...转载 2022-09-16 18:45:00 · 1758 阅读 · 0 评论 -
Linux网络包接收过程
网络模块是Linux内核中最复杂的模块了,看起来一个简简单单的收包过程就涉及到许多内核组件之间的交互,如网卡驱动、协议栈,内核ksoftirqd线程等。看起来很复杂,本文想通过图示的方式,尽量以容易理解的方式来将内核收包过程讲清楚。现在让我们再串一串整个收包过程。当用户执行完recvfrom调用后,用户进程就通过系统调用进行到内核态工作了。如果接收队列没有数据,进程就进入睡眠状态被操作系统挂起。这块相对比较简单,剩下大部分的戏份都是由Linux内核其它模块来表演了。......转载 2022-09-08 19:00:00 · 1272 阅读 · 0 评论 -
深入理解高性能网络开发路上的绊脚石 - 同步阻塞网络 IO
在网络开发模型中,有一种非常易于开发同学使用的方式,那就是同步阻塞的网络 IO。例如我们想请求服务器上的一段数据,那么 C 语言的一段代码 demo 大概是下面这样:但是在高并发的服务器开发中,这种网络 IO 的性能奇差。因为如果用一句话来概括,那就是:同步阻塞网络 IO 是高性能网络开发路上的绊脚石!转载 2022-09-04 13:33:52 · 248 阅读 · 0 评论 -
深入理解 epoll 的内核实现
回想上面第一节我们在 accept 函数创建 socket 流程里提到的 sock_init_data 函数,在这个函数里已经把 sk_data_ready 设置成 sock_def_readable 函数了。在前面 epoll_ctl 执行的时候,内核为每一个 socket 上都添加了一个等待队列项。当 socket 上数据就绪时候,内核将以 sock_def_readable 这个函数为入口,找到 epoll_ctl 添加 socket 时在其上设置的回调函数 ep_poll_callback。....转载 2022-09-12 19:00:00 · 636 阅读 · 0 评论 -
深入理解Linux IO复用之epoll
在linux中IO复用有select,poll, epoll,但epoll是性能最好的,支持的并发量也最大。所以我们就专门来聊聊它。原创 2022-09-20 19:00:00 · 386 阅读 · 0 评论 -
深入理解TCP三次握手四次挥手
两次握手」:无法防止历史连接的建立,会造成双方资源的浪费,也无法可靠的同步双方序列号「四次握手」:三次握手就是最少次数建立可靠连接,所以不需要使用更多的通信次数问题二SYN攻击的基础是依靠TCP建立连接时三次握手的设计。即攻击者短时间伪造不同 IP 地址的SYN报文,向服务端发送该SYN报文,是服务端进入到SYN_RECV状态,但服务端回应的SYN-ACK报文,无法发送到客户端(因为IP是未知的),而得不到ACK报文应答,慢慢的服务端的半连接队列就会给占满了,使其无法正常提供服务。查看SYN攻击。.....原创 2022-08-26 20:00:00 · 983 阅读 · 1 评论 -
OSI七层模型及TCP/IP四层模型详细分析
在计算机网络中有OSI七层模型及TCP/IP四层模型的说法,而且也是计算机很重要的知识。下面我们就来分析一下它们:OSI七层模型及TCP/IP四层模型的对比: 从上面两张图我们知道,每层之间是相互独立的,而且完全解耦,具有很大的灵活性。下面我们就详细的分析每层的作用。为操作系统或网络应用程序提供访问网络通信服务的,它以报文的形式进行数据传输。那么它主要包含的协议有哪些呢?域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务,它通常运行在UDP之上,默认端口53。它主要解决I原创 2022-08-19 18:00:00 · 1049 阅读 · 0 评论 -
TCP与UDP的区别
在计算机中有一个很重要的知识,即计算机网络,那计算机网络有哪些知识点呢?下面给出一个计算机网络神图如下:从图中我们看以看出,OSI的层级结构有七层:应用层,表示层,会话层,传输层,网络层,数据链路层和物理层。但是如果从TCP/IP来看,它就是四层分别是:应用层,传输层,网络层,网络接口层,如下:那么TCP/IP四层模型与OSI体系结构的关系是怎么样的呢?如下:从网络层级关系中我们看到在TCP/IP四层模型的传输层中有两个很重要的协议就是TCP 和 UDP。......原创 2022-08-12 18:45:00 · 269 阅读 · 0 评论