TCP/IP
文章平均质量分 67
TCP/IP详解
带鱼兄
爱在新空气,快乐每一天
展开
-
TCP 、UDP、IP包的最大长度是多少
一、传输层TCP:对于TCP来说,数据是流式传输的,传输数据可以接近无限大,单次传输的数据受限于网络层。UDP:而对于UDP,IP报头占20字节,UDP报头占8字节,则最大的包体为65535(由报文长度字段决定)-20-8=65507,单次传输的数据受限于网络层。二、网络层局域网:MTU大约是1500字节,也就是一个IP包可以传输大约1460个字...原创 2017-12-02 23:53:57 · 14956 阅读 · 2 评论 -
linux下tcp客户端能建立多少个长连接
一、TCP四元组本地IP地址、本地TCP端口号、外地IP地址、外地TCP端口号二、调整能打开的最大文件描述符$ echo "655350" > /proc/sys/fs/file-max$ vi /etc/security/limits.conf * soft nofile 655350 * hard nofile 655350三、调整临时端口范原创 2017-09-05 15:32:52 · 8821 阅读 · 0 评论 -
linux下查看tcp丢弃的请求数
查看由于负载等原因,被内核丢弃的请求数(总量),在高峰期可以查看这两个数值是否在增长;命令:netstat -s | grep "times the listen queue of a socket overflowed"netstat -s | grep "SYNs to LISTEN sockets ignored"原文出自:原创 2017-10-16 19:12:19 · 3597 阅读 · 0 评论 -
TCP/IP编程之connect函数与accept函数的关系
一、原理connect函数成功,并不代表服务器应用程序已经调用accept函数我是图:二、测试客户端代码:#include #include #include #include #include #include #include #include #include #include #include int main(){原创 2017-10-28 16:33:47 · 1781 阅读 · 0 评论 -
TCP/IP编程之listen函数backlog参数详解(linux)
LISTEN(2) Linux Programmer's Manual LISTEN(2)NAME listen - listen for connections on a socketSY原创 2017-08-30 23:07:20 · 1555 阅读 · 0 评论 -
TCP/IP编程之SO_REUSEADDR和SO_REUSEPORT套接字选项
基本概念:SO_REUSEADDR套接字选项能起到以下4个不同的功用:(1)SO_REUSEADDR允许启动一个监听服务器并捆绑众所周知端口,即使以前建立的该端口用作它们的本地端口的连接仍存在。这个条件通常是这样碰到的:a)启动一个监听服务器;b)连接请求到的,派生一个子进程来处理这个客户;c)监听服务器终止,但子进程继续为现有的连接上的客户提供服务;d)重启监听服原创 2016-08-23 23:41:32 · 9890 阅读 · 0 评论 -
gethostbyname()函数详解
基本概念:gethostname()函数主要作用:用域名或者主机名获取地址,操作系统提供的库函数函数原型:GETHOSTBYNAME(3) Linux Programmer's Manual GETHOSTBYNAME(3)NAME gethostbyname, gethostbyaddr, sethostent,原创 2016-07-18 22:32:34 · 61742 阅读 · 5 评论 -
TCP/IP编程之fcntl函数详解
fcntl函数可执行各种描述符操作,在这里我们只需要关心如何设置套接字为非阻塞式I/O函数原型:FCNTL(2) Linux Programmer's Manual FCNTL(2)NAME fcntl - manipulate file descriptorSYNOPSIS原创 2016-07-14 23:18:04 · 1950 阅读 · 0 评论 -
TCP/IP编程之套接字选项详解
前述:上一篇文章已经接受了如何设置套接字选项:TCP/IP编程之getsockopt/setsockopt函数详解这篇文章主要介绍TCP/IP编程中我们常用的套接字选项。展开:SO_ERROR当一个套接字上发生错误时,内核会将该套接字名为so_error的变量设置为标准的Unix Exxx值中的一个,我们称它为该套接字的待处理错误(pending err原创 2016-07-14 00:22:48 · 2382 阅读 · 0 评论 -
TCP/IP编程之getsockopt/setsockopt函数详解
前述:有很多方法来获取和设置影响套接字的选项:· getsockopt和setsockopt函数· fcntl函数,是把套接字设置为非阻塞式I/O型或者信号驱动式I/O型以及设置套接字属主的POSIX的方式· ioctl函数这篇文章只讨论getsockopt和setsockopt函数函数原型:GETSOCKOPT(2) Linux Pr原创 2016-07-13 00:06:03 · 18319 阅读 · 0 评论 -
TCP/IP编程之shutdown函数详解
前述:终止网络连接的通常方法是调用close函数,close把描述符的引用计数减1,仅在该计数变为0时才关闭套接字。同时close会终止读和写两个方向的数据传送。使用shutdown函数可以不管引用计数就激发TCP的正常连接关闭,同时shutdown也可以选择性的关闭读或者写。函数原型:SHUTDOWN(2) Linux Pro原创 2016-07-12 21:44:56 · 3225 阅读 · 0 评论 -
TCP/IP编程之select函数详解
前述:linux下的I/O复用模型目前很多都已经不用select函数了,而是用epoll,但是为什么还需要了解select编程呢,其实是从两个方面考虑的:一是为了通过select去理解epoll,而是非阻塞的connect函数也会用到select函数。函数原型:SELECT(2) Linux Programmer's Manual原创 2016-07-12 00:14:11 · 8307 阅读 · 0 评论 -
TCP/IP编程之close函数详解
通常的Unix close函数也用来关闭套接字,并终止TCP连接。函数原型:CLOSE(2) Linux Programmer's Manual CLOSE(2)NAME close - close a file descriptorSYNOPSIS #include原创 2016-07-09 22:56:21 · 2456 阅读 · 0 评论 -
TCP/IP编程之accept函数详解
accept函数由TCP服务器调用,用于从已完成连接队列返回下一个已完成连接。如果已完成连接队列为空,那么进程被投入睡眠(假定套接字默为默认的阻塞方式)函数原型:ACCEPT(2) Linux Programmer's Manual ACCEPT(2)NAME accept, accept4 - a原创 2016-07-09 22:17:48 · 34185 阅读 · 0 评论 -
TCP/IP编程之listen函数详解
函数原型:LISTEN(2) Linux Programmer's Manual LISTEN(2)NAME listen - listen for connections on a socketSYNOPSIS #include /* See NOTES */原创 2016-07-09 21:51:09 · 6945 阅读 · 0 评论 -
TCP/IP编程之bind函数详解
函数原型:BIND(2) Linux Programmer's Manual BIND(2)NAME bind - bind a name to a socketSYNOPSIS #include /* See NOTES */ #include原创 2016-07-09 21:32:25 · 5923 阅读 · 0 评论 -
TCP/IP编程之socket函数详解
函数原型:SOCKET(2) Linux Programmer's Manual SOCKET(2)NAME socket - create an endpoint for communicationSYNOPSIS #include /* See NOTES */原创 2016-07-09 20:53:36 · 1615 阅读 · 0 评论 -
TCP/IP编程之connect函数详解
函数原型:CONNECT(2) Linux Programmer's Manual CONNECT(2)NAME connect - initiate a connection on a socketSYNOPSIS #include /* See NOTES */原创 2016-07-09 20:03:35 · 12561 阅读 · 0 评论 -
套接字和文件描述符
基本概念:a)一个TCP连接的套接字对(socket pair)是一个定义该连接的两个端点的四元组:本地IP地址、本地TCP端口、外地地址、外地TCP端口。套接字对唯一标识一个网络上的每个TCP连接。b)标识每个端口的两个值(IP地址和端口号)通常称为一个套接字。c)内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是原创 2016-07-09 00:23:49 · 7755 阅读 · 1 评论 -
从一个开发的角度看负载均衡和LVS
在大规模互联网应用中,负载均衡设备是必不可少的一个节点,源于互联网应用的高并发和大流量的冲击压力,我们通常会在服务端部署多个无状态的应用服务器和若干有状态的存储服务器(数据库、缓存等等)。 在大规模互联网应用中,负载均衡设备是必不可少的一个节点,源于互联网应用的高并发和大流量的冲击压力,我们通常会在服务端部署多个无状态的应用服务器和若干有状态的存储服务器(数据库、缓存等等)。转载 2016-06-08 10:02:53 · 1108 阅读 · 0 评论 -
socket超时设置详解(connect/read/write)
一.基本概念(摘自:《unix网络编程卷1》14.2 套接字超时)在涉及套接字的I/O操作上设置超时的方法有以下三种(1)调用alarm,它在指定超时期满时产生SIGALARM。这个方法涉及信号处理,而信号处理在不同的实现上存在差异,而且可能干扰进程中现有的alarm调用。(2)在select中阻塞等待I/O(select有内置的时间限制),以此替代直接阻塞在read或write调用上原创 2016-02-16 23:44:44 · 18990 阅读 · 0 评论 -
Nagle算法
1.概念:某个应用程序不断地提交小单位的数据,例如数据只占1字节大小。因为TCP数据包具有40字节的标头信息(TCP与IPv4各占20字节),这导致了41字节大小的数据包只有1字节的可用信息,造成庞大的浪费。这种状况常常发生于Telnet工作阶段-大部分的键盘操作会产生1字节的数据并马上提交。更糟的是,在慢速的网络连接下,这类的数据包会大量地在同一时点传输,造成拥塞碰撞(Congestion原创 2016-02-02 15:16:37 · 1550 阅读 · 0 评论 -
linux统计TCP端口的连接数
关键点:使用netstat命令netstat -natl | grep ":80" | awk '{print $6}' | sort | uniq -c | sort -nr原创 2016-01-20 22:08:25 · 2244 阅读 · 0 评论 -
epoll:EPOLLET模式下的正确读写方式
1.EPOLLLT和EPOLLET最大的区别在于事件的通知机制,看这个文章EPOLLLT和EPOLLET的区别2.EPOLLET模式下并不意味着要循环读取完缓冲区的所有数据,贴出一段读取代码:n = 0;while ((nread = read(fd, buf + n, BUFSIZ-1)) > 0) { n += nread;}if (nread == -1 &&原创 2016-01-04 23:25:46 · 4954 阅读 · 0 评论 -
epoll:EPOLLLT模式下的正确读写方式
epoll编程需要关注以下一些细节:1.进程可打开的最大文件描述符,通过ulimit -a查看open files选项2.read函数的返回值与errno,errno为EAGAIN和EINTR的含义,要如何处理?3.write函数的返回值与errno,errno为EAGAIN和EINTR的含义,要如何处理?4.epoll的events的含义,man 2 epoll_ctl有详细注解原创 2016-01-02 21:25:49 · 5899 阅读 · 0 评论 -
epoll:EPOLLLT和EPOLLET的区别
概念:Level-triggered :水平触发,缺省模式,同时支持block和no-blockedge-triggered :边缘触发,只支持no-block通知模式:LT模式时,事件就绪时,假设对事件没出做处理,内核会反复通知事件就绪ET模式时,事件就绪时,假设对事件没出做处理,内核不会反复通知事件就绪针对TCP的测试详请:1.listenfd设原创 2015-12-31 00:38:38 · 11242 阅读 · 1 评论 -
惊群效应测试
概念:惊群效应就是当一个fd的事件被触发时,所有等待这个fd的线程或进程都被唤醒,一般都是socket的accept()会导致惊群,很多个进程都阻塞在server socket的accept(),一但有客户端连接,所有进程的accept()都会返回,但是只有一个进程会accept成功,就是惊群。原创 2015-12-28 10:35:46 · 2575 阅读 · 0 评论 -
大小端模式和网络字节序
概念:在几乎所有的机器上,多字节对象都被存储为连续的字节序列。例如在C语言中,一个类型为int的变量x地址为0x100,那么其对应地址表达式&x的值为0x100。且x的四个字节将被存储在存储器的0x100, 0x101, 0x102, 0x103位置。大端字节序:在内存中,低地址存放数据的高位,高地址存放数据的低位小端字节序:在内存中,低地址存放数据的低位,高地址存放数据的高位原创 2015-12-08 10:15:06 · 1160 阅读 · 0 评论 -
TCP/IP (五) TCP连接的内存使用
当服务器的并发TCP连接数以十万计时,我们就会对一个TCP连接在操作系统内核上消耗的内存多少感兴趣。socket编程方法提供了SO_SNDBUF、SO_RCVBUF这样的接口来设置连接的读写缓存,linux上还提供了以下系统级的配置来整体设置服务器上的TC转载 2015-12-27 15:54:32 · 2286 阅读 · 0 评论 -
TCP/IP (四) TCP连接的关闭
TCP连接的关闭有两个方法close和shutdown,这篇文章将尽量精简的说明它们分别做了些什么。为方便阅读,我们可以带着以下5个问题来阅读本文:1、当socket被多进程或者多线程共享时,关闭连接时有何区别?2、关连接时,若连接上有来自对端的还未处理的消息,会怎么处理?3、关连接时,若连接上有本进程待发送却未来得及发送出的消息,又会怎转载 2015-11-30 21:37:05 · 1762 阅读 · 0 评论 -
TCP/IP (三) TCP消息的接收
上一篇文章提到:先发送数据包data1,再发送数据包data2,data1的数据是有可能比data2先达到对端的接收缓冲区,但是对端调用接收函数时,是不可能先读取到data2再读取到data1,下面说明为什么会出现这种情形。 这里先借用陶大师的一张图,再列举若干情形1. 应用程序开始收取TCP消息,与程序所在的机器网卡上接收到网络里发来的TCP原创 2015-11-25 21:15:38 · 1457 阅读 · 0 评论 -
TCP/IP (二) TCP消息的发送
和上一篇文章一样,带着一些问题来思考TCP的消息发送 1.已经建立好的tcp连接,先发送数据包data1,再发送数据包data2,数据包data2会不会比数据包先到达?2.发送send函数和write函数有什么区别?调用发送函数后内核发生了什么事情?3.发送方法成功返回时,是否能保证数据已经发送出去,是否能保证对端一定收到?4.套接字为阻塞或者非阻塞时,发送方法做的事情有何不同原创 2015-11-20 19:41:41 · 2602 阅读 · 0 评论 -
TCP/IP (一) accept建立连接
初学TCP/IP的时候,七层网络协议、三次握手、四次分手,这些大家都比较熟知,这里主要是带着一些问题来思考整个TCP/IP流程。1.三次握手的具体流程是怎么样的?2.socket编程中int listen(int fd, int backlog); backlog的真正意义是什么?3.一个TCP server能建立多少个本机连接?能建立多少个非本机连接?原创 2015-11-17 20:05:58 · 8022 阅读 · 0 评论