
TCP-IP网络编程
文章平均质量分 68
吴正伟的博客
这个作者很懒,什么都没留下…
展开
-
UNIX多进程 - 销毁僵尸进程 - wait()和waitpid()函数
#include <sys/types.h>#include <sys/wait.h>pid_t wait(int *status); pid_t waitpid(pid_t pid, int *statusPtr, int options);现在要知道调用wait或waitpid的进程可能会发生什么情况:如果其所有子进程都在运行,则阻塞。如果一个子进程已经终止,正在等待的父进程获取到终止原创 2015-03-04 19:24:26 · 700 阅读 · 0 评论 -
简析TCP的三次握手与四次分手
TCP 协议层次及报文格式我们需要知道TCP工作在网络OSI的七层模型中的第四层——Transport层,IP在第三层——Network层,ARP在第二层——Data Link层;在第二层上的数据,我们把它叫Frame,在第三层上的数据叫Packet,第四层的数据叫Segment。 同时,我们需要简单的知道,数据从应用层发下来,会在每一层都会加上头部信息,进行封装,然后再发送到数据接收端。这个基本的原创 2015-03-24 10:16:57 · 835 阅读 · 0 评论 -
TCP/IP 网络编程(二)
用户数据包协议(User Datagram Protocal, UDP),UDP服务器端和客户端均只需要 1 个套接字。在TCP中向 10 个客户端提供服务,则除了守门的服务器套接字之外,还需要 10 个服务器端套接字。UDP不保存连接状态,因此每次传输数据都要添加目标地址信息。#include <sys/socket.h>ssize_t sendto(int sock, void *buf, si原创 2015-03-13 16:26:46 · 838 阅读 · 0 评论 -
Nagle 算法(TCP中用于拥塞控制)详解
算法适应的情况和原理在广域网上,小分组会增加拥塞的可能性,一种简单且好用的方式是使用Negla算法。该算法要求一个TCP连接上最多只能有一个未被确认的未完成的小分组,在该分组的确认到来之前不发送其他的小分组。相反,TCP收集这些少量的分组,并在确认到来之时以一个分组的形式发送出去。这样,就能够减少网络中小分组的数量,提高数据包的利用率。算法优势:自适应,确认到达的越快,数据发送也就越快。关闭算法有时原创 2015-03-13 16:53:27 · 1590 阅读 · 0 评论 -
TCP三次握手和Time-Wait状态
第一次握手:建立连接时,客户端发送syn包和一个随机序列号seq=x到服务器,并进入SYN_SEND状态,等待服务器进行确认。(syn,同 步序列编号)。第二次握手,服务器收到syn包,必须确认客户的SYN,然后服务器发送一个ACK=1, SYN=1, seq=y的随机数和ack=x+1的确认数的包发送回去。第三次握手是客户端收到服务器端的SYN+ACK包,然后向服务器端发送确认包 ack=y+原创 2015-03-13 16:37:21 · 1855 阅读 · 0 评论 -
TCP/IP 网络编程入门(一)
网络编程中接受连接请求(服务器端)的套接字创建过程:调用socket函数创建套接字调用bind函数分配IP地址和端口号调用listen函数转为可接收请求状态调用accept函数受理连接请求基于 Linux 中的文件操作打开文件#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(const char原创 2015-03-12 16:21:08 · 1239 阅读 · 0 评论 -
TCP/IP 网络编程(六)
进程模型:线程模型:线程的创建和执行流程#include <pthread.h>int pthread_create(pthread_t * restrict thread, const pthread_attr_t * restrict attr,void * (* start_routine)(void *), void * restrict arg); // 成功返回0, 失败返回其他值~原创 2015-03-17 16:56:56 · 803 阅读 · 0 评论 -
TCP/IP 网络编程 (三)
服务器端未处理高并发请求通常采用如下方式:多进程:通过创建多个进程提供服务多路复用:通过捆绑并统一管理 I/O 对象提供服务多线程:通过生成和客户端等量的线程提供服务多进程服务器端#include <unistd.h>pid_t fork(); // 成功返回进程 ID, 失败返回-1fork函数将创建调用的函数副本。子进程将使用新的内存空间复制当前函数的环境。父进程:函数返回子进程ID原创 2015-03-16 21:20:32 · 923 阅读 · 0 评论 -
TCP/IP 网络编程(四)
套接字和标准 I/O标准 I/O 函数的优点具有良好的可移植性可以利用缓冲提高性能创建套接字时,操作系统将生成用于 I/O 的缓冲。此缓冲在执行 TCP 协议时发挥重要作用。若使用标准函数,将会获得额外的另一缓冲的支持。函数缓冲是为了提高传输性能,套接字缓冲是为了实现协议,如窗口控制、重传等。通过以下两个角度考虑性能的提高:传输的数据量数据向输出缓冲移动的次数标准函数的缺点:不容易进行原创 2015-03-17 09:37:38 · 856 阅读 · 0 评论 -
TCP/IP 网络编程(五)
优于 select 的 epoll (I/O 复用)select 速度慢的原因调用select后针对所有文件描述符的循环每次调用函数时都需要向该函数传递监视对象信息select并不是把发生变化的文件描述符单独集中到一起,而是通过观察作为监视对象的fd_set函数的变化,因此不能避免对所有监视对象的循环语句。而且,监视对象变量会发生变化,在调用select函数之前要复制并保存原有信息,并在每次调原创 2015-03-17 15:41:17 · 747 阅读 · 0 评论 -
条件触发和边缘触发 及 epoll 的优点
条件触发: 只要输入缓冲有数据就会一直通知该事件边缘触发: 输入缓冲收到数据时仅注册1次该事件,即使输入缓冲中还留有数据,也不会再进行注册水平触发(level-triggered,也被称为条件触发):只要满足条件,就触发一个事件(只要有数据没有被获取,内核就不断通知你)边缘触发(edge-triggered): 每当状态变化时,触发一个事件举个读socket的例子,假定经过长时间的沉默后,现原创 2015-03-17 15:40:28 · 1478 阅读 · 0 评论 -
UNIX多进程 - 销毁僵尸进程 - wait()和waitpid()函数
#include <sys/types.h>#include <sys/wait.h>pid_t wait(int *status); pid_t waitpid(pid_t pid, int *statusPtr, int options);现在要知道调用wait或waitpid的进程可能会发生什么情况:如果其所有子进程都在运行,则阻塞。如果一个子进程已经终止,正在等待的父进程获取到终止原创 2015-03-04 19:56:46 · 749 阅读 · 0 评论 -
图解TCP-IP协议
本文原文链接通过两个图来梳理TCP-IP协议相关知识。TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道。如图1所示,给出了TCP通信过程的示意图。图1主要包括三部分:建立连接、传输数据、断开连接。建立TCP连接很简单,通过三次握手便可建立连接。建立好连接后,开始传输数据。TCP数据传输牵涉到的概念很多:超时重传、快速重传、流量控制、拥塞控制等等。断开连接的过程也很简原创 2015-05-05 10:50:40 · 926 阅读 · 0 评论