![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux网络编程
文章平均质量分 79
rock_joker
这个作者很懒,什么都没留下…
展开
-
linux网络编程--TCP分包 粘包 MTU 和MSS之间的关系分析
其实在以前的文章中介绍了和这个话题相关的文章,TCP封包。这里还想继续回顾想以前的内容,把不明白的东西弄明白: IP分片在以太网上,由于电气限制,一帧不能超过1518字节,除去以太网帧头14字节(mac地址等)和帧尾4字节校验,还剩1500字节,这个大小称为MTU(最大传输单元)。如果你的IP包大于1500字节,IP层就会分片了。而1492的MTU值的来源转载 2017-08-04 17:34:25 · 340 阅读 · 0 评论 -
epoll机制:epoll_create、epoll_ctl、epoll_wait、close用法详解
在Linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,linux/posix_types.h头文件有这样的声明:#define__FD_S转载 2017-08-05 20:21:12 · 21371 阅读 · 2 评论 -
linux网络编程--shut_down和close()函数的区别
在Linux C网络编程中,一共有两种方法来关闭一个已经连接好的网络通信,它们就是close函数和shutdown函数,它们的函数原型分别为:1#include2int close(intsockfd)3//返回:0——成功, 1——失败4转载 2017-08-04 17:31:35 · 479 阅读 · 0 评论 -
linux 中IO多路复用epoll函数的ET和LT工作模式详解
epoll的优点:1.支持一个进程打开大数目的socket描述符(FD) select 最不能忍受的是一个进程所打开的FD是有一定限制的,由FD_SETSIZE设置,默认值是2048。对于那些需要支持的上万连接数目的IM服务器来说显然太少了。这时候你一是可以选择修改这个宏然后重新编译内核,不过资料也同时指出这样会带来网络效率的下降,二是可以选择多进程的解决方案(传统的 Apach转载 2017-08-05 20:46:53 · 982 阅读 · 0 评论 -
linux网络编程--深入浅出send和recv
先明确一个概念:每个TCP socket在内核中都有一个发送缓冲区和一个接收缓冲区,TCP的全双工的工作模式以及TCP的滑动窗口便是依赖于这两个独立的buffer以及此buffer的填充状态。接收缓冲区把数据缓存入内核,应用进程一直没有调用read进行读取的话,此数据会一直缓存在相应 socket的接收缓冲区内。再啰嗦一点,不管进程是否读取socket,对端发来的数据都会经由内核接收并且缓存到转载 2017-08-05 21:43:48 · 512 阅读 · 0 评论 -
再次深入理解TCP网络编程中的send和recv(TCP传输的一般过程抓包演示)
本篇我们用一个测试机上的阻塞socket实例来说明主题。文章中所有图都是在测试系统上现截取的。需要理解的3个概念1. TCP socket的buffer每个TCP socket在内核中都有一个发送缓冲区和一个接收缓冲区,TCP的全双工的工作模式以及TCP的流量(拥塞)控制便是依赖于这两个独立的buffer以及buffer的填充状态。接收缓冲区把数据缓存入内核,应用进程一直没有调用r转载 2017-08-06 10:53:21 · 1082 阅读 · 0 评论 -
linux网络编程--TCP分包 粘包 MTU 和MSS之间的关系分析
其实在以前的文章中介绍了和这个话题相关的文章,TCP封包。这里还想继续回顾想以前的内容,把不明白的东西弄明白: IP分片在以太网上,由于电气限制,一帧不能超过1518字节,除去以太网帧头14字节(mac地址等)和帧尾4字节校验,还剩1500字节,这个大小称为MTU(最大传输单元)。如果你的IP包大于1500字节,IP层就会分片了。而1492的MTU值的来源转载 2017-08-06 12:31:28 · 423 阅读 · 0 评论 -
TCP之性能优化避免慢启动
TCP协议中有个慢启动,在《TCP/IP详解卷一》中占据的篇幅很小,但是这个东西,在某些业务场景下,对性能的影响非常大。什么是慢启动最初的TCP的实现方式是,在连接建立成功后便会向网络中发送大尺寸的数据包,假如网络出现问题,很多这样的大包会积攒在路由器上,很容易导致网络中路由器缓存空间耗尽,从而发生拥塞。因此现在的TCP协议规定了,新建立的连接不能够一开始就发送大尺寸的数据包,而只能从转载 2017-08-06 14:52:58 · 997 阅读 · 0 评论 -
TCP协议详解(慢启动,流量控制,阻塞控制之类)
UDP协议提供了端到端之间的通讯,应用程序只需要在系统中监听一个端口,便可以进行网络通讯。随着计算机网络的发展,计算机网络所承载的业务越来越多,有些业务数据的传输需要具备可靠性,譬如我们在进行在线聊天的时候,我们发送的一条消息,我们必须明确地知道对方是否收到。如果对方对我们发送地消息不给予确认,我们就不知道对方是否已经收到。显然,UDP协议并没有提供可靠交付的能力,因此我们可能需要在应用层转载 2017-08-06 14:56:18 · 14080 阅读 · 0 评论 -
同步/异步与阻塞非阻塞的关系
一、“阻塞”与"非阻塞"与"同步"与“异步"不能简单的从字面理解,提供一个从分布式系统角度的回答。1.同步与异步同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由转载 2017-08-03 15:09:26 · 151 阅读 · 0 评论 -
序列化、反序列化与jsoncpp学习
json是序列化与反序列化的一种方式。1. 什么叫序列化和反序列化?用途是什么?把对象转换为字节序列的过程称为对象的序列化。 把字节序列恢复为对象的过程称为对象的反序列化。 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中; 2) 在网络上传送对象的字节序列。 对象的序列化主要有两种用途: 在很多应用中,需要对某些对象进行序列化,让它们离开内存转载 2017-07-25 19:26:50 · 511 阅读 · 0 评论 -
TCP/IP详解--再次深入理解TCP网络编程中的send和recv
本篇我们用一个测试机上的阻塞socket实例来说明主题。文章中所有图都是在测试系统上现截取的。需要理解的3个概念1. TCP socket的buffer每个TCP socket在内核中都有一个发送缓冲区和一个接收缓冲区,TCP的全双工的工作模式以及TCP的流量(拥塞)控制便是依赖于这两个独立的buffer以及buffer的填充状态。接收缓冲区把数据缓存入内核,应用进程一直没有调用r转载 2017-04-24 19:52:12 · 1585 阅读 · 0 评论 -
Send的基本规则 & 能否多个进程或线程同时向同一个Socket传递数据
一、Socket中send的普通执行流程。 当调用该函数时,send先比较待发送数据的长度len和套接字s的发送缓冲的长度, (1) 如果len大于s的发送缓冲区的长度,该函数返回SOCKET_ERROR; (2) 如果len小于或者等于s的发送缓冲区的长度,那么send先检查协议是否正在发送s的发送缓冲中的数据,就是等待协议把数据发送完 (3) 如原创 2017-03-08 20:46:16 · 13604 阅读 · 1 评论 -
拥塞避免&流量控制
拥塞避免算法拥塞避免算法是一种处理丢失分组的方法。该算法假定由于分组受到损坏引起的丢失是非常少的(远小于1%),因此分组丢失就意味着在源主机和目的主机之间的某处网络上发生了拥塞。有两种分组丢失的指示:发生超时和接收到重复的确认。如果使用超时作为拥塞指示,则需要使用一个好的RTT算法。拥塞避免算法和慢启动算法是两个目的不同、独立的算法。但是当拥塞发生时,我们希望降低分组进入网转载 2017-03-27 21:30:04 · 890 阅读 · 0 评论 -
浏览器的一个请求从发送到返回都经历了什么,讲的越详细越好
浏览器的一个请求从发送到返回都经历了什么,讲的越详细越好我大概讲下我的答案:1、先从网络模型层面:client (浏览器)与 server 通过 http 协议通讯,http 协议属于应用层协议,http 基于 tcp 协议,所以 client 与 server 主要通过 socket 进行通讯;而 tcp 属于传输层协议、如果走 https 还需要会话层 TLS、SSL 等协议;转载 2017-03-23 13:08:30 · 5273 阅读 · 0 评论 -
TCP传输小数据包效率问题(译自MSDN)
TCP传输小数据包效率问题(译自MSDN)http://www.ftpff.com/blog/?q=node/16 摘要:当使用TCP传输小型数据包时,程序的设计是相当重要的。如果在设计方案中不对TCP数据包的延迟应答,Nagle算法,Winsock缓冲作用引起重视,将会严重影响程序的性能。这篇文章讨论了这些问题,列举了两个案例,给出了一些传输小数据包的优化设计方案。背景:转载 2017-03-13 19:54:45 · 280 阅读 · 0 评论 -
结构体传输 & TCP粘包处理
一、网络传输struct类型数据在网络通讯过程中往往涉及一些有关联的参数传递,例如结构体之类的。对于结构体其实方法挺简单,由于结构体对象在内存中分配的空间都是连续的,所以可以将整个结构体直接转化成字符串发送,到了接收方再将这个字符串还原成结构体就可以了。网络传输struct数据的约束有两个:约束一、就是结构体的大小必须是固定的,不能含有可变大小数据,例如CString、string原创 2017-03-08 23:00:25 · 6238 阅读 · 1 评论 -
Socket描述符选项[SOL_SOCKET]
Socket描述符选项[SOL_SOCKET] #include int setsockopt( int socket, int level, int option_name, const void *option_value, size_t option_len);转载 2017-03-15 23:01:28 · 224 阅读 · 0 评论 -
Linux高性能服务器编程——I/O复用
IO复用I/O复用使得程序能同时监听多个文件描述符,通常网络程序在下列情况下需要使用I/O复用技术:客户端程序要同时处理多个socket客户端程序要同时处理用户输入和网络连接TCP服务器要同时处理监听socket和连接socket,这是I/O复用使用最多的场合服务器要同时处理TCP请求和UDP请求。比如本章将要讨论的会社服务器服务器要同时监听多个端口,或转载 2017-03-15 23:07:58 · 376 阅读 · 0 评论 -
setsockopt中参数之SO_REUSEADDR的意义
1、一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用。 SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的socket,才可以重复绑定使用。server程序总是应该在调用bind()之前设置SO_REUSEADDR套接字选项。TCP,先调用close()的一方会进入TIME_WAIT状态2、转载 2017-03-15 23:15:39 · 262 阅读 · 0 评论 -
HTTP状态码
一、200状态码: 成功2××: 成功处理了请求的状态码。 1、200 :服务器已成功处理了请求并提供了请求的网页。 2、204: 服务器成功处理了请求,但没有返回任何内容。 二、300状态码: 重定向3×× :每次请求中使用重定向不要超过 5 次。 1、301: 请求的网页已永久移动到新位置。当URLs发生变化时,使用301代码。搜索引擎索引中保存新的转载 2017-04-15 21:15:47 · 157 阅读 · 0 评论 -
结合内核实现源码分析 select poll epoll区别
在博客中以前的文章有介绍epoll的使用方法,但是并没有详细介绍之间的区别http://blog.csdn.net/yusiguyuan/article/details/15027821http://blog.csdn.net/yusiguyuan/article/details/15029465http://blog.csdn.net/yusiguyuan/article转载 2017-08-04 17:03:07 · 311 阅读 · 0 评论