TCP/IP详解
粪逗er
努力的人运气不会差
展开
-
大并发服务器的优化(Nginx\内核)
对于高性能网站 ,请求量大,如何支撑?1: 减少请求 ---- 对于开发人员----合并css, 背景图片, 减少mysql查询等.2: 对于运维---- nginx的expires ,利用浏览器缓存等,减少查询.3: 利用cdn来响应请求4: 最终剩下的,不可避免的请求----服务器集群+负载均衡来支撑. 所以,来到第4步后,就不要再考虑减少请求这个方向了,而是思考如何...原创 2018-12-20 08:49:27 · 283 阅读 · 0 评论 -
TCP保活:心跳包/乒乓包/SO_KEEPALIVE
引言:长连接断开后一直占用系统资源,可以通过心跳包判断连接是否断开;使用心跳包检测到连接已经死了,就断开连接。总的来说,心跳包主要也就是用于长连接的保活和断线处理。一般的应用下,判定时间在30-40秒比较不错。如果实在要求高,那就在6-9秒。TCP保活机制1.心跳包由应用程序自己发送心跳包来检测连接是否正常,大致的方法是:服务器在一个 Timer事件中定时向客户端发送一个短小精悍的数...原创 2018-10-30 19:08:53 · 1767 阅读 · 0 评论 -
TCP协议详解
目录[1]TCP头部结构、TCP头部选项结构[2]紧急指针和带外数据OOB概念相关APITCP发送带外数据过程TCP接收带外数据过程[3]使用tcpdump观察TCP连接的建立和关闭[4]TCP的11种状态以及状态变化: netstat三次握手四次挥手TIME_WAIT状态[5]复位报文段RST: flags [R.]1.访问不存在的端口2.向处于TIME_WAIT状态的端口发起连接请求时3.异常...原创 2018-10-20 16:42:48 · 1730 阅读 · 0 评论 -
SIGPIPE信号
SIGPIPE信号产生的规则:当一个进程向某个已收到RST的套接字执行写操作时,内核向该进程发送SIGPIPE信号。SIGPIPE信号产生的场景举例 ① 初始时,C、S连接建立,若某一时刻,C端进程宕机或者被KILL而终止(终止的C端进程将会关闭打开的文件描述符,即向S端发送FIN段),S端收到FIN后,响应ACK ② 假设此时,S端仍然向C端发送数据:当第一次写数据后,S端将会...原创 2019-06-10 13:08:32 · 9402 阅读 · 0 评论 -
滑动窗口与流量控制机制、拥塞控制
1、利用滑动窗口实现流量控制如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。 ⇒ 利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。流量控制:指点对点通信量的控制,是端到端的问题。流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。2、拥塞控制拥塞控制:防止过多的...原创 2018-12-11 14:38:20 · 2137 阅读 · 0 评论 -
详解RST、RST攻击
复位报文段RST: flags [R.]1、什么是RST?接收到RST后,将会执行什么操作?在TCP协议中RST表示复位,用来异常的关闭连接,在TCP的设计中它是不可或缺的。2、出现RST分节的情况可以在三种情况下发生,在连接建立时、在中间发送数据时、在连接关闭时。① 访问/connect一个不存在的端口服务器程序端口未打开,而客户端来连接② 向处于TIME_WAIT状态的端口发起连...原创 2018-12-11 12:25:32 · 8855 阅读 · 0 评论 -
IP协议 & IP首部
IPv4协议详解[1]IPv4报文结构[2]使用tcpdump观察IPv4头部结构在同一台机器上,使用telnet 127.0.0.1登陆本机,并用tcpdump抓取这个过程中telnet客户端和telnet服务器程序之间交换的IP数据报,操作见下图所示:tcpdump的-x选项,输出数据包的二进制码。[3]IP分片IP数据报格式再介绍、MTU当IP数据报长度>帧MTU时,它将...原创 2018-11-11 20:20:58 · 1224 阅读 · 0 评论 -
TCP/IP协议族、封装/解封装
一、TCP/IP协议族体系结构以及主要协议数据链路层实现了网卡接口的网络驱动程序,以处理数据在物理媒介(比如以太网、令牌环等)上的传输。主要的协议ARP和RARP(1)ARP:IP–>MAC[1]ARP协议的工作原理主机向自己所在的网络广播一个ARP请求包(我的IP和MAC是xxx,向询问IP为xxx的MAC是?)。此网络上的其他机器收到该请求包,只有被请求的目标机器才回应该A...原创 2018-11-11 10:17:56 · 5913 阅读 · 0 评论 -
TCP的11种状态、三次握手/四次挥手、TIME_WAIT/CLOSE_WAIT
查看TCP状态:netstat -nap三次握手服务器调用listen系统函数,进入LISTEN状态客户端向服务器发送SYN段请求连接后,进入SYN_SEND状态一旦监听到某个连接请求(受到SYN段),就将该连接放入内核等待队列种,并向客户端发送SYN+ACK,此时服务器处于SYN_RECV状态客户端发送ACK给服务器&&服务器接收到客户端发来的ACK后,二者都进入E...原创 2018-12-11 10:38:28 · 1121 阅读 · 0 评论 -
TCP的四种计时器
TCP共使用以下四种计时器,即重传计时器、坚持计时器、保活计时器和时间等待计时器。这几个计时器的主要特点如下:1、重传计时器目的:防止数据丢失,丢失了就重传TCP每发送一个报文段,就对此报文段设置一个超时重传计时器。可能发生两种情况:(1)若在计时器截止时间到(通常是60秒)之前收到了对此特定报文段的确认,则撤销此计时器。(2)若在收到了对此特定报文段的确认之前计时器截止期到,则重传此报...原创 2018-12-11 10:02:38 · 2015 阅读 · 0 评论 -
TIMEWAIT状态
TIMEWAIT是友好的修改内核参数/proc/sys/net/ipv4/tcp_tw_recycle来快速回收被关闭的socket,使得TCP连接根本就不进入TIME_WAIT状态客户端在接收到服务器发送的FIN段后,没有立即进入CLOSED状态,而是进入TIME_WAIT状态;在TIME_WAIT状态,客户端连接要等待一段长为2MSL的时间才能完全关闭。TIME_WAIT状态存在的原因有...原创 2018-12-11 09:17:12 · 8612 阅读 · 0 评论 -
socket[可读\可写\异常]3种条件的发生
一、下列四个条件中的任何一个满足时,socket准备好读:socket接收缓冲区中已经接收的数据的字节数大于等于socket接收缓冲区低潮限度的当前值;对这样的socket的读操作不会阻塞,并返回一个大于0的值(即:准备好读入的数据的字节数)。注解:可以用socket选项SO_RCVLOWAT来设置此低潮限度,对于TCP和UDPsocket,其缺省值为1。socket是一个用于监听的soc...原创 2018-12-10 20:49:35 · 932 阅读 · 0 评论 -
TCP协议 & TCP首部
说明:TCP协议十分复杂和重要,对于个人已经掌握的点在本文就不在详述。常识:服务器和客户端判断对方是否已经关闭连接的方法:read函数返回0[1]TCP头部结构、TCP头部选项结构TCP选项详解:[2]使用tcpdump观察TCP连接的建立和关闭...原创 2018-11-11 21:54:17 · 1379 阅读 · 0 评论 -
Nagle算法、TCP确认延迟机制、TCP_CORK
两种类型的TCP报文段简介成块数据、交互数据1、在TCP传输数据流中,存在两种类型的TCP报文段,一种包含成块数据(通常是满长度的,携带一个报文段最多容纳的字节数),另一种则包含交互数据(通常只有携带几个字节数据)。2、举例说明什么样的数据是“交互数据”? ==> 从键盘输入的一个字符,占用一个字节,可能在传输上造成41字节的包,其中包括1字节的有用信息和40字节的首部数据。这种情况转...原创 2018-12-10 19:43:14 · 591 阅读 · 0 评论 -
Ethernet 以太网数据帧
以太网数据帧正常情况下,最大承载数据量为1500字节以太网数据帧格式原创 2019-07-15 15:35:52 · 635 阅读 · 0 评论