
TCP/IP网络编程
Chan_Keh
https://github.com/chankeh
展开
-
select和epoll区别
一、以一个生活中的例子来解释. 假设你在大学中读书,要等待一个朋友来访,而这个朋友只知道你在A号楼,但是不知道你具体住在哪里,于是你们约好了在A号楼门口见面. 如果你使用的阻塞IO模型来处理这个问题,那么你就只能一直守候在A号楼门口等待朋友的到来,在这段时间里你不能做别的事情,不难知道,这种方式的效率是低下的. 进一步解释select和epoll模型的差异. select版大妈做的是如下的事原创 2017-06-28 20:32:23 · 677 阅读 · 1 评论 -
TCP 连接的建立和终止
三路握手 建立一个TCP连接时会发生下述情形。 (1)服务器必须准备好接受外来的连接。这通常通过调用socket、bind和listen这3个函数来完成的,我们称之为被动打开。(2)客户通过调用connect发起主动打开。这导致客户TCP发送一个SYN(同步)分节,它告诉服务器客户将在(待建立的)连接中发送的数据的初始序列号。通常SYN分节不携带数据,其所在IP数据报只含有一个IP首部、一个TC原创 2017-09-09 12:47:05 · 457 阅读 · 0 评论 -
ping命令执行过程详解
ping命令执行过程详解 机器A ping 机器B同一网段ping通知系统建立一个固定格式的ICMP请求数据包ICMP协议打包这个数据包和机器B的IP地址转交给IP协议层(一组后台运行的进程,与ICMP类似)IP层协议将以机器B的IP地址为目的地址,本机IP地址为源地址,加上一些其他的控制信息,构建一个IP数据包获取机器B的MAC地址 4.1 IP层协议通过机器B的IP地址和自己的原创 2017-09-15 12:25:41 · 3481 阅读 · 0 评论 -
HTTP请求报文和HTTP响应报文
HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。HTTP有两类报文:请求报文和响应报文。HTTP请求报文一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,下图给出了请求报文的一般格式。or<request-line><headers><blank line>[<request-body> 1.原创 2017-09-04 23:30:37 · 497 阅读 · 0 评论 -
TIME_WAIT和CLOSE_WAIT
在服务器的日常维护过程中,会经常用到下面的命令:[plain] view plain copy print?netstat -n | awk ’/^tcp/ {++S[NF]} END {for(a in S) print a, S[a]}' </span></span></li></ol></d原创 2017-08-26 10:55:23 · 254 阅读 · 0 评论 -
非阻塞式socket的select()用法
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如 connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式原创 2017-08-14 18:15:56 · 2407 阅读 · 0 评论 -
select回声Server端实现
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<arpa/inet.h>#include<sys/socket.h>#include<sys/time.h>#include<sys/select.h>void error_handling(char *message);#de原创 2017-07-28 23:32:48 · 262 阅读 · 0 评论 -
epoll回声Server端实现
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<arpa/inet.h>#include<sys/socket.h>#include<sys/epoll.h>void error_handling(char *message);#define BUFF_SIZE 100#de原创 2017-07-28 23:31:28 · 410 阅读 · 0 评论 -
《TCP/IP网络编程》(尹圣雨)笔记
已上传到Git 个人GitHub,点击此处原创 2017-08-02 21:20:51 · 3338 阅读 · 0 评论 -
TCP 为什么是三次握手,为什么不是两次或四次?
作者:郭无心 链接:https://www.zhihu.com/question/24853633/answer/63668444 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 TCP连接建立过程中为什么需要“三次握手”在谢希仁著《计算机网络》第四版中讲“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。在另一部经典转载 2017-07-23 09:22:59 · 549 阅读 · 1 评论 -
基于Linux的多线程Web Server
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <arpa/inet.h>#include <sys/socket.h>#include <pthread.h>#define BUF_SIZE 1024#define SMALL_BUF 100void* reques原创 2017-07-30 12:59:34 · 551 阅读 · 0 评论 -
epoll详细中文解释
/* * fs/eventpoll.c (Efficient event retrieval implementation) * Copyright (C) 2001,...,2009 Davide Libenzi * * This program is free software; you can redistribute it and/or modify * it under原创 2017-07-03 10:00:27 · 565 阅读 · 0 评论 -
网络IO之阻塞、非阻塞、同步、异步总结
1、前言 在网络编程中,阻塞、非阻塞、同步、异步经常被提到。unix网络编程第一卷第六章专门讨论五种不同的IO模型,Stevens讲的非常详细,我记得去年看第一遍时候,似懂非懂,没有深入理解。网上有详细的分析:http://blog.youkuaiyun.com/historyasamirror/article/details/5778378。 我结合网上博客和书总结一下,加以区别,加深理解。 2、数据流原创 2017-07-01 22:07:18 · 314 阅读 · 0 评论 -
从I/O复用谈epoll为什么高效
很多人提到网络就说epoll,认为epoll效率是最高的。单纯的这么认为,其实有失偏颇。epoll固然高效,可是它是怎么做到高效的,它到底比select或poll优异在哪儿?我们通过调用流程来简单分析下。首先以select为例(poll类似),看下其调用过程1.选择想要处理的套接字,通过接口FD_SET(fd, &set)加入到set中;2.调用select(max+1, &set,,..)3.对s原创 2017-07-10 21:48:30 · 257 阅读 · 0 评论