![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
unp
文章平均质量分 68
jarkeet
这个作者很懒,什么都没留下…
展开
-
Wireshark基本介绍和学习TCP三次握手
Wireshark基本介绍和学习TCP三次握手之前写过一篇博客:用 Fiddler 来调试HTTP,HTTPS。 这篇文章介绍另一个好用的抓包工具wireshark, 用来获取网络数据封包,包括http,TCP,UDP,等网络协议包。记得大学的时候就学习过TCP的三次握手协议,那时候只是知道,虽然在书上看过很多TCP和UDP的资料,但是从来没有真正见过这些数据包, 老是感觉在云上飘转载 2013-09-11 22:28:16 · 649 阅读 · 0 评论 -
使用select函数的TCP和UDP回射服务器程序
/* include udpservselect01 */#include "unp.h"intmain(int argc, char **argv){ int listenfd, connfd, udpfd, nready, maxfdp1; char mesg[MAXLINE]; pid_t childpid; fd_set rset; ssize原创 2013-10-13 20:26:58 · 1802 阅读 · 0 评论 -
TCP—经受时延、nagle算法、滑动窗口、拥塞窗口
经受时延:TCP在接收到数据时并不立即发送ACK,相反,它推迟发送,以便将ACK与需要沿该方向发送的数据一起发送,时延为200ms,超过时延范围,发送确认。nagle算法:该算法主要用于避免过多小分节报文在网 络中传输,从而降低网络容量利用率。比如一个20字节的TCP首部+20字节的IP首部+1个 字节的数据组成的TCP数据报,有效传输通道利用率只有将近1 /40。原创 2013-10-12 10:55:35 · 1792 阅读 · 0 评论 -
UNIX网络编程——套接字选项(SO_RCVBUF和SO_SNDBUF)(SO_REUSEADDR)
有时候我们需要控制套接字的行为(如修改缓冲区的大小),这个时候我们就要学习套接字选项。[cpp] view plaincopyprint?int getsockopt(int sockfd,int level,int optname,void *optval,socklen_t *optlen) int setsockopt(int s转载 2013-09-18 10:35:17 · 1618 阅读 · 0 评论 -
UNIX网络编程——socket概述和字节序、地址转换函数
一、什么是socketsocket可以看成是用户进程与内核网络协议栈的编程接口。socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信。socket API是一层抽象的网络编程接口,适用于各种底层网络协议,如IPv4、IPv6,以及以后要讲的UNIX Domain Socket。然而,各种网络协议的地址格式并不相同,如下图所示:转载 2013-09-18 10:31:15 · 932 阅读 · 0 评论 -
UNIX网络编程——常用套接字选项(SOL_SOCKET级别)
[cpp] view plaincopyprint?#include int setsockopt( int socket, int level, int option_name,const void *option_value, size_t option_len); 第一个参数socket是套接字描述符。第二个参数level是被设置转载 2013-09-18 13:14:07 · 1993 阅读 · 0 评论 -
I/O多路转接(select、pselect和poll)使用
I/O多路转接:先构造一张有关描述符的列表,然后调用一个函数,直到这些描述符中的一个已准备好进行I/O时,该函数才返回。在返回时,它告诉进程哪些描述符已准备好可以进行I/O。 poll、pselect和select这三个函数使我们能够执行I/O多路转接。一、select函数在所有依从POSIX的平台上,select函数使我们可以执行I/O多路转接。传向sel转载 2013-09-17 14:50:19 · 846 阅读 · 0 评论 -
UNIX网络编程——产生RST
产生RST的3个条件:1. 建立连接的SYN到达某端口,但是该端口上没有正在监听的服务。 如:IP为192.168.1.33的主机上并没有开启WEB服务(端口号为0x50),这时我们通过IE去访问192.168.1.33,通过Wireshark抓包,可以看到,对此SYN包的回复为RST。说明此服务器(即IP192.168.1.33)是存在的,不过其上并没有运行WEB Server(如a转载 2013-09-17 13:22:07 · 665 阅读 · 0 评论 -
UNIX网络编程——shutdown 与 close 函数 的区别
假设server和client 已经建立了连接,server调用了close, 发送FIN 段给client(其实不一定会发送FIN段,后面再说),此时server不能再通过socket发送和接收数据,此时client调用read,如果接收到FIN 段会返回0,但client此时还是可以write 给server的,write调用只负责把数据交给TCP发送缓冲区就可以成功返回了,所以不会出错,而s转载 2013-09-17 12:41:45 · 717 阅读 · 0 评论 -
5种I/O模型
我们看到TCP客户同时处理两个输入:标准输入和TCP套接字。我们遇到的问题是就在客户阻塞于(标准输入上)fgets调用,服务器进程会被杀死。服务器TCP虽然正确的给客户TCP发送了一个FIN,但是既然客户进程正阻塞于从标准输入读入的过程,它将看不到这个EOF,直到从套接字读时为止(可能额已过了很长时间)。这样的进程需要一种预先告知内核的能力,使得内核一旦发现进程指定的一个或多个I/O条件就绪(也就转载 2013-09-16 14:48:15 · 761 阅读 · 0 评论 -
tcpdump命令的使用
工作中一直在用tcpdump,感觉非常方便,今天心血来潮百度了一下tcpdump的用法,才发现原来还有这么多强大的功能自己都不知道,那叫一个汗啊。以此文作为备份,记录一些新知道的用法,各位网友谁有新的用法,也可以及时告知我进行补充,一起丰富,哈哈!本人邮箱:rick1026zhang@gmail.com废话不多说,切入正题。命令及解释用红色字体,命令所需参数的参数值转载 2013-09-12 13:47:27 · 1040 阅读 · 0 评论 -
UNIX网络编程——SOCKET API和TCP STATE的对应关系_三次握手_四次挥手及TCP延迟确认
在我们学习网络基础时,传输层的协议有TCP和UDP;在Linux网络编程中,我们使用socket API,实现网络通信。那么: socket API 和 TCP 协议中各个状态是如何对应的呢?我们可以通过下图来看: 在socket系统调用中,如何完成三次握手和四次挥手: SOCK_DGRAM,即UDP中的co转载 2013-09-11 22:12:20 · 848 阅读 · 0 评论 -
ip首部校验和计算
IP首部校验和的计算方法: 1.把校验和字段清零。 2.然后对每16位(2字节)进行二进制反码求和,反码求和的意思是先对每16位求和,再将得到的和转为反码。 接下来详细描述反码求和的步骤:看下面的代码 算法:SHORT checksum(USHORT* buffer, int size){ unsigned long cksum = 0;转载 2013-11-20 16:01:59 · 1088 阅读 · 0 评论