linux网络编程
文章平均质量分 65
贪睡的蜗牛
记性不好,那就多写博客。。。。
展开
-
linux网络编程-C/S模型-本地套接字
socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。这是因为,IPC机制本质上是可靠的通讯,而网络协议是为不可靠的通讯设计的。UNIX Domain原创 2022-07-13 11:10:54 · 646 阅读 · 0 评论 -
linux网络编程-C/S模型-UDP服务器
TCP: 面向连接的,可靠数据包传输。对于不稳定的网络层,采取完全弥补的通信方式。 丢包重传。优点:稳定。数据流量稳定、速度稳定、顺序缺点:传输速度慢。相率低。开销大使用场景:数据的完整型要求较高,不追求效率。大数据传输、文件传输。UDP: 无连接的,不可靠的数据报传递。对于不稳定的网络层,采取完全不弥补的通信方式。 默认还原网络状况优点: 传输速度块。相率高。开销小。缺点:不稳定。数据流量。速度。顺序。使用场景:对时效性要求较高场合。稳定性其次。 游戏、视频会议、视频电话。腾讯、华为、阿里原创 2022-07-13 10:07:49 · 964 阅读 · 0 评论 -
linux网络编程-多路I/O转换-I/O复用概念及select函数
刚开始都是由server处理,不管是监听还是连接建立还是读写,那么能否让内核来帮忙处理一点呢select、poll、epoll都属于多路I/O转换第一个参数,如下图所示,前三个空间不用,然后有一个lfd,三个cdf,最后一个cfd在6位置上,因此是6+1=7第2、3、4个参数分别对应要监听的读、写、异常集合,且是传入传出参数将要监听读的socket放到读集合里,将要监听写的socket的放到读集合里,同理异常集合,然后在监听后返回需要读、写、异常的集合,因此传入的是需要监听的,传出的是实原创 2022-07-07 11:24:57 · 104 阅读 · 0 评论 -
linux网络编程-TCP-TCP协议
TCP数据报格式(1)序号(sequence number):Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。初始时序号会被设置一个随机的初始值(ISN),之后序号值=ISN+数据在整个字节流中的偏移(2)确认号(acknowledgement number):Ack序号,占32位,需要配合ACK标志位,只有ACK标志为1时,确认序号字段才有效,整个字段为收到的序号值+1(3)标志位(Flags):共6个,即URG、ACK、PSH、RST、SYN、FIN原创 2022-07-05 19:07:39 · 501 阅读 · 0 评论 -
linux网络编程-socket-函数及TCP通信实现
在通信过程中,套接字一定是成对出现的即服务器一个,客户端一个。Socket本身有“插座”的意思,在Linux环境下,用于表示进程间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件。既然是文件,那么理所当然的,我们可以使用文件描述符引用套接字。虽然仅有一个套接字,但这个套接字有两个缓冲区,一端的发送缓冲区对应对端的接收缓冲区,那么不看细节,那就是管道从一端流到另一端。一个服务端和一个客户端连接有三个socket,两个在服务端,一个在客户端,服务端使用socket函数创建完socket并bind地原创 2022-07-05 15:56:50 · 427 阅读 · 0 评论 -
linux网络编程-出错处理函数封装
系统调用不能保证每次都成功,必须进行出错处理,这样一方面可以保证程序逻辑正常,另一方面可以迅速得到故障信息。如果上次每次函数的调用都要加判断,那太过于繁琐。为使错误处理的代码不影响主程序的可读性,我们把与socket相关的一些系统函数加上错误处理代码包装成新的函数,做成一个模块wrap.c,这个wrap.c还是原有函数的参数,只不过将函数首字母大写了。上面这个goto…就这么写的,那就有吧,这里是因为accept可能会被信号打断,使用goto再调用一次。socket中不能使用fread和fwrite,原创 2022-07-06 11:16:21 · 171 阅读 · 0 评论 -
linux网络编程-网络-网络基础
从应用的角度出发,协议可理解为“规则”,是数据传输和数据的解释的规则。假设,A、B双方欲传输文件。规定:第一次,传输文件名,接收方接收到文件名,应答OK给传输方;第二次,发送文件的尺寸,接收方接收到该数据再次应答一个OK;第三次,传输文件内容。同样,接收方接收数据完成后应答OK表示文件内容接收成功。由此,无论A、B之间传递何种文件,都是通过三次数据传输来完成。A、B之间形成了一个最简单的数据传输规则。双方都按此规则发送、接收数据。A、B之间达成的这个相互遵守的规则即为协议。这种仅在A、B之间被遵原创 2022-07-04 15:39:49 · 78 阅读 · 0 评论 -
linux网络编程-多路I/O转换-epoll-基础
cat /proc/sys/fs/file-max --> 当前计算机所能打开的最大文件个数。 受硬件影响。ulimit -a ——> 当前用户下的进程,默认打开文件描述符个数。 缺省为 1024soft可以用命令修改,但是不能超过这个配置文件中hard的值int epoll_create(int size); open an epoll file descriptor,也就是打开一个文件句柄,在其下面挂着一颗颗句柄2、epoll_ctl3、epoll_wait阻塞监原创 2022-07-08 09:52:00 · 122 阅读 · 0 评论 -
linux网络编程-多路I/O转换-epoll反应堆
eventset函数 对lfd指定了监听函数,在里面对客户端指定了接受函数这个结构体就是树上的一个节点,eventset()传进一个结构体就是树上的一个节点, 将自己定义的结构体一一赋值,eventdel()从红黑树上删除节点,epoll_ctl操作红黑树,第二个参数DEL表示删除,虽然我觉得第四个参数没有意义按照以前的做法直接置为NULL就可以了。这里是判断ev->status==1 那么就是在红黑树上,删除是将其状态置为0就默认删除了,因此才有了第四个参数acceptconn接受客户端的原创 2022-07-11 15:47:45 · 152 阅读 · 0 评论 -
linux网络编程-简单多线程并发服务器实现
pthread_create()函数是创建线程(实际上就是确定调用该线程函数的入口点),在线程创建以后,就开始运行相关的线程函数。 pthread_create的返回值表示成功,返回0;表示出错,返回表示-1。int pthread_detach(pthread_t thread); 成功:0;失败:错误号作用:从状态上实现线程分离线程分离状态:指定该状态,线程主动与主控线程断开关系。线程结束后(不会产生僵尸线程),其退出状态不由其他线程获取,而直接自己自动释放(自己清理掉PCB的残留资源)。网络原创 2022-07-06 18:46:17 · 395 阅读 · 0 评论 -
linux网络编程-多路I/O转换-poll
fds:监听的文件描述符(数组,存放着下列结构的数据)nfds: 监听数组的,实际有效监听个数。比如arr[1024],我要指明数组里有多少个元素。timeout: 超时时长。单位:毫秒。>0、 -1: 阻塞等待、 0: 不阻塞返回值:返回满足对应监听事件的文件描述符 总个数(select poll epoll都是一样的)。如果不再监控某个文件描述符时,可以把pollfd中,fd设置为-1,poll不再监控此pollfd,下次返回时,把revents设置为0。优点:缺点:...原创 2022-07-07 18:32:21 · 100 阅读 · 0 评论 -
linux网络编程-read 函数errno的各种类型(待完善)
read 函数返回值:原创 2022-07-08 08:16:00 · 665 阅读 · 0 评论 -
linux网络编程-TCP-TCP协议(续)
新建几个client进程,使用下面代码查看6666端口,server设计在主动关闭方为什么会有2MSL时长?(1)让4次握手关闭流程更加可靠;4次握手的最后一个ACK是是由主动关闭方发送出去的,若这个ACK丢失,被动关闭方会再次发一个FIN过来。若主动关闭方能够保持一个2MSL的TIME_WAIT状态,则有更大的机会让丢失的ACK被再次发送出去。(2)防止lost duplicate对后续新建正常链接的传输造成破坏。lost uplicate在实际的网络中非常常见,经常是由于路由器产生故障,路径原创 2022-07-06 20:28:16 · 541 阅读 · 0 评论