
网络编程
huangyimo
这个作者很懒,什么都没留下…
展开
-
socket的局域网广播
广播1. TCP/IP协议栈中, 传输层只有UDP可以广播.2. 只能对同一子网内部广播, 广播数据包不经过路由器.3. UDP的广播地址为255.255.255.2554. 在winsock实现中, 有一个选项对应是否允许广播.linux下必须调用setsockopt打开该选项.5. 打开后, 用sendto向255.255.255.255发送的数据包全部转载 2017-11-24 18:52:04 · 1354 阅读 · 0 评论 -
linux原始套接字(1)-arp请求与接收
一.概述 以太网的arp数据包结构:arp结构op操作参数:1为请求,2为应答。常用的数据结构如下:1.物理地址结构位于netpacket/packet.h 1 struct sockaddr_ll 2 { 3 unsigned shor转载 2017-11-24 18:53:23 · 1208 阅读 · 1 评论 -
NetBIOS网络编程
NetBIOS网络编程 “网络基本输入/输出系统”(Network Basic Input/Output System,NetBIOS)是1983年由Sytex公司为IBM公司开发的一种标准应用程序编程接口,并被微软采用。1985年,IBM改进了NetBIOS,推出了NetBIOS扩展用户接口(NetBIOS Extended User Interface,NetBEUI)通转载 2017-12-04 23:02:29 · 1189 阅读 · 0 评论 -
TCP和UDP的最完整的区别
TCP UDPTCP与UDP基本区别 1.基于连接与无连接 2.TCP要求系统资源较多,UDP较少; 3.UDP程序结构较简单 4.流模式(TCP)与数据报模式(UDP); 5.TCP保证数据正确性,UDP可能丢包 6.TCP保证数据顺序,UDP不保证 UDP应用场景: 1.面向数据报方式 2.网络数据大多为短消息 3转载 2018-01-12 17:11:17 · 191 阅读 · 0 评论 -
神秘的40毫秒延迟与 TCP_NODELAY
最近的业余时间几乎全部献给 breeze 这个多年前挖 下的大坑—— 一个异步 HTTP Server。努力没有白费,项目已经逐渐成型了, 基本的框架已经有了,一个静态 文件模块也已经实现了。写 HTTP Server,不可免俗地一定要用 ab 跑一下性能,结果一跑不打紧,出现了一个困扰了我好几天的问题:神秘的 40ms 延迟。Table of Contents转载 2018-01-15 23:52:28 · 517 阅读 · 0 评论 -
TCP常见的网络通信问题
本次 Live 主要包括以下内容 • TCP/IP协议栈层次与三次握手、四次挥手需要知道的细节 • TCP与UDP适用场景 • linux网络模型 • epoll_event结构中epoll_data_t的fd与ptr使用场景 •Windows网络模型 •异步connect •select可以检测网络异常吗 •epoll的水平模式和边缘模式 •阻塞与非阻塞socket的设置与区别 •send/re...转载 2018-08-08 11:00:46 · 7873 阅读 · 0 评论 -
CLOSE_WAIT状态的原因与解决方法
这个问题之前没有怎么留意过,是最近在面试过程中遇到的一个问题,面了两家公司,两家公司竟然都面到到了这个问题,不得不使我开始关注这个问题。说起CLOSE_WAIT状态,如果不知道的话,还是先瞧一下TCP的状态转移图吧。关闭socket分为主动关闭(Active closure)和被动关闭(Passive closure)两种情况。前者是指有本地主机主动发起的关闭;而后者则是指本地主机检测到远...转载 2018-08-08 11:39:14 · 628 阅读 · 0 评论 -
time_wait状态产生的原因,危害,如何避免
前言 请说说你对TCP连接中time_wait状态的理解解答:先上TCP的状态变迁图这幅图来自《TCP IP详解卷1:协议 原书第2版中文》13.5 TCP状态转换图这幅图来自《UNIX网络编程,卷1:套接字联网API》2.6.4 TCP状态转换图1. time_wait状态如何产生? 由上面的变迁图,首先调用close()发起主动关闭的一方,在发送最后一个A...转载 2018-08-08 11:42:54 · 92759 阅读 · 6 评论 -
Linux TCP Finwait2/Timewait状态要义浅析
我讨厌TCP。但是我的工作中总是要接触TCP! 近期三四个礼拜,接连碰到三三两两TCP的问题,这些都无关拥塞控制,这些都是状态机方面的问题,但无论怎样,我是非常讨厌的,以至于恶心,我释放大量的感情色彩在TCP协议…但这不能否认我对TCP的理解以及对其性情的掌握已经超出了大多数人,我在咒骂中成长。我咒骂着TCP,同时也可能被别人鄙视着…那就来吧。本周本来不想写技术文章的,很多的pendin...转载 2018-08-15 19:20:49 · 223 阅读 · 0 评论 -
GET和POST两种基本请求方法的区别
GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。 你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。 当你在面试中被问到这个问题,你的内心充满了自信和喜悦。你轻...转载 2018-08-21 11:26:54 · 189 阅读 · 1 评论 -
TCP keepalive的机理及使用
TCP 是面向连接的 , 在实际应用中通常都需要检测对端是否还处于连接中。如果已断开连接,主要分为以下几种情况:1.连接的对端正常关闭,即使用 closesocket 关闭连接。2.连接的对端非正常关闭,包括对端异常关闭,网络断开等情况。对于第一种情况,很好判断,但是对于第二种情况,可能会要麻烦一些。在网上找到了一些文章,大致有以下两种解决方法: 自己编写心跳包程序简单的说也...转载 2018-08-21 15:20:22 · 4160 阅读 · 0 评论 -
TCP/IP详解--TIME_WAIT状态的必要性
1 TCP关闭时的四次握手Tcp连接在关闭的的时候,执行的是一个四次握手的过程,下图是客户端发起的关闭时客户端和服务器的状态转换图具体过程如下:1、 客户端发送FIN报文段,进入FIN_WAIT_1状态。2、 服务器端收到FIN报文段,发送ACK表示确认,进入CLOSE_WAIT状态。3、 客户端收到FIN的确认报文段,进入FIN_WAIT_2状态。4、 服务器端发送FIN报文端,...转载 2018-08-21 16:29:40 · 263 阅读 · 0 评论 -
为什么使用getaddrinfo()函数
在IPv6的应用中getaddrinfo()是很常见的,最常见的形式是:addrinfo hints;addrinfo *res = NULL; memset(&hints,0,sizeof(hints)); hints.ai_family=AF_INET6;hints.ai_socktype=SOCK_DGRAM;hints.ai_protocol=IPPROTO_U...转载 2018-10-08 19:53:09 · 1623 阅读 · 0 评论 -
端口详解+端口扫描原理+简单端口扫描实现
一 摘要 端口是个网络应用中很重要的东西,相当于“门”。二 什么是端口 端口在计算机网络中是个非常重要的概念,他不是硬件,不同于计算机中的插槽,可以说是个软插槽。如果有需要,一台计算机中可以由上万个端口。 端口是由计算通信协议TCP/IP协议定义的。其中规定,用IP地址和端口作为套接字,它代表TCP链接的一个连接端,一般称为sock转载 2017-12-11 11:28:47 · 3312 阅读 · 1 评论 -
Linux IO多路复用之epoll网络编程(含源码)
前言本章节是用基本的Linux基本函数加上epoll调用编写一个完整的服务器和客户端例子,可在Linux上运行,客户端和服务端的功能如下:客户端从标准输入读入一行,发送到服务端服务端从网络读取一行,然后输出到客户端客户端收到服务端的响应,输出这一行到标准输出 服务端代码如下:#include #include转载 2017-11-20 16:00:16 · 218 阅读 · 0 评论 -
TCP/IP读书笔记
第一章 概述1 TCP/IP的分层链路层:物理接口、ARP、RARP网络层:IP、ICMP、IGMP运输层:TCP和UDP应用层:应用程序2 五类IP地址共32bitA类地址 起始字段0----- 网络号7bit---- 主机号24bit 范围 0.0.0.0-127.255.255.255B类地址 起始字段10---- 网络号14bit--- 主机号16bit转载 2017-09-10 21:07:15 · 318 阅读 · 0 评论 -
Select模型
讲一下套接字模式和套接字I/O模型的区别。先说明一下,只针对Winsock,如果你要骨头里挑鸡蛋把UNIX下的套接字概念来往这里套,那就不关我的事。套接字模式:阻塞套接字和非阻塞套接字。或者叫同步套接字和异步套接字。套接字模型:描述如何对套接字的I/O行为进行管理。Winsock提供的I/O模型一共有五种:select,WSAAsyncSelect,WSAEventSelect,O转载 2015-07-08 08:57:15 · 481 阅读 · 0 评论 -
Linux网络编程之多播
1.概念单播是用于两个主机之间传送数据,广播是一个主机对局域网内的所有主机发送数据。而多播,又称为组播,它是对一组特定的主机通信。将网络上同一类型 业务逻辑上分组,只和组内的成员通信,其它主机没有加入组则不能通信。与单播相同的是,组播允许在Internet上通信,而广播只是同一局域网内的主机 通信。组播地址是特定的,D类地址用于组播,即244.0.0.0到239.255.255.255.转载 2016-03-03 14:23:46 · 739 阅读 · 0 评论 -
linux 广播
广播是一台主机向局域网内的所有主机发送数据。这时,同一网段的所有主机都能接收到数据。发送广播包的步骤大致如下:(1)确定一个发送广播的接口,如eth0(2)确定广播的地址,通过ioctl函数,请求码设置为SIOCGIFBRDADDR得到广播的地址(3)使用这个广播地址进行广播在局域网内,广播通常用来探测服务器。广播发送端:/*转载 2016-03-03 15:00:57 · 540 阅读 · 0 评论 -
TCP的TIME_WAIT快速回收与重用
声明一点:Linux中是无法修改tcp的TIME_WAIT值的,除非重新编译,起码我是没有找到怎么改。值得注意的是,net.ipv4.tcp_fin_timeout这个参数是FIN_WAIT_2的值,而不是TIME_WAIT的值。我不知道为何很多人都会把它当成是TIME_WAIT的值,想了一下,我觉得是两点:1.TIME_WAIT过于耀眼,以至于所有出现timeout,加上里面有个tcp的转载 2016-07-31 21:23:21 · 896 阅读 · 0 评论 -
tcp粘包分析
这两天看csdn有一些关于socket粘包,socket缓冲区设置的问题,发现自己不是很清楚,所以查资料了解记录一下: 一 .两个简单概念长连接与短连接:1.长连接 Client方与Server方先建立通讯连接,连接建立后不断开, 然后再进行报文发送和接收。2.短连接 Client方与Server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此转载 2016-08-09 10:30:56 · 289 阅读 · 0 评论 -
epoll和select区别
先说下本文框架,先是问题引出,然后概括两个机制的区别和联系,最后介绍每个接口的用法一、问题引出 联系区别问题的引出,当需要读两个以上的I/O的时候,如果使用阻塞式的I/O,那么可能长时间的阻塞在一个描述符上面,另外的描述符虽然有数据但是不能读出来,这样实时性不能满足要求,大概的解决方案有以下几种:1.使用多进程或者多线程,但是这种方法会造成程序的复杂,而且对与进程与线程的创转载 2017-03-28 10:50:50 · 301 阅读 · 0 评论 -
Listen第二个参数的意义
今天主要回顾下listen的第二个参数的意义。 话说现在现在都是用框架写业务代码。真的很少在去关注最基本的socket函数的意义了。该忘得都忘得差不多了。~~~ 要慢慢捡起来。 主要是在看Redis网络这块的时候它的第二个参数设置的是500多。 而且突然想到当初几年前腾讯电话面试问过我第二个参数是什么意思。当时我一股脑就说成connet的连接数量了。哈哈 2b.照例 先上图转载 2017-03-28 11:33:27 · 396 阅读 · 0 评论 -
epoll分析
服务器端[html] view plain copy #include stdio.h> #include stdlib.h> #include string.h> #include errno.h> #include netinet/in.h> #include sys/socket.h> #includ转载 2017-03-28 11:40:45 · 328 阅读 · 0 评论 -
服务器TIME_WAIT和CLOSE_WAIT详解和解决办法
来自:http://blog.youkuaiyun.com/shootyou/article/details/6622226 昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下:http://blog.youkuaiyun.com/shootyou/article/details/6615051里头的分析过程有提到,通过查看服务器网络状态检测到服务器有大量的CLOSE_W转载 2017-03-30 08:50:04 · 315 阅读 · 0 评论 -
SOCKET CLOSE_WAIT状态的说明
CLOSE_WAIT出现的原因: 就是某一方在网络连接断开后,对等方没有检测到这个错误(对方断开)而没有调用 closesocket,导致了这个状态的出现; 断开连接的时候: 当发起主动关闭的左边这方发送一个FIN过去后,右边被动关闭的这方要回应一个ACK,这个ACK是TCP回应的(同时TCP向上层应用程序提交一个ERROR,导致上面的SOCKET的send或者re转载 2017-03-30 08:51:05 · 1961 阅读 · 0 评论 -
一次服务端大量CLOSE_WAIT问题的解决
今天在运行服务器的时候发现一个问题,问题的表现是客户端一直在请求,但是返回给客户端的信息是异常,服务端压根没有收到请求,查看了一下配置信息没有错误,首先查看了一下是不是服务器的连接已经满了,打开netstat命令发现服务器的连接有大量的CLOSE_WAIT状态的socket,没怎么遇到这个问题,开始还真有段懵了,第一反应就是是不是客户端的问题(是不是出问题的第一反应都是别人的问题),但是马上补充了转载 2017-03-30 08:52:00 · 3495 阅读 · 0 评论 -
select()和poll()的区别是什么?
Whats thedifference between select() and poll()?原文地址:http://www.unixguide.net/network/socketfaq/2.14.shtmlFrom Richard Stevens (rstevens@noao.edu):二者根本的不同是:select()的fd_set是一个位掩码(bit mask),转载 2017-06-25 17:59:15 · 2277 阅读 · 0 评论 -
select、poll、epoll之间的区别总结
select,poll,epoll简介: select select本质上是通过设置或者检查存放fd标志位的数据结构来进行下一步处理。这样所带来的缺点是:1、 单个进程可监视的fd数量被限制,数组有大小限制;2 、需要维护一个用来存放大量fd的数据结构,这样会使得用户空间和内核空间在传递该结构时复制开销大;3 、对socket进行扫描转载 2017-06-25 18:18:52 · 1039 阅读 · 0 评论 -
poll模型
/** * @AticalName: I/O多路复用技术详解之poll模型 * @author DK.BurNIng * @date 2012-8-9 下午1:46:54 * @version V1.2 * @comefrom http://blog.youkuaiyun.com/bengda */poll模型poll()系统调用是System V的多元I/O解决方案。它解转载 2015-07-08 09:06:26 · 451 阅读 · 0 评论