网络
文章平均质量分 57
午饭要阳光
热爱编程
展开
-
TCP使用的四种计时器
TCP使用的四种计时器: 1、重传计时器 当TCP发送报文段时,就创建该特定报文段的重传计时器。 1.1、若在计时器截止时间到(通常60秒)之前收到了对此特定报文段的确认,则撤销此计时器。 1.2、若在计时器截止时间之前没有收到对此特定报文的确认,则就认为该报文丢失,需要重传此报文段,并将计时器复位。2、坚持计时器 假设TCP收到了一个窗口大小为0报文段,发送TCP就停止传送报文段原创 2017-03-05 15:53:11 · 3831 阅读 · 1 评论 -
I/O多路转接之poll
poll也是一种I/O多路转接的方式,select将三种事件进行了区分,并且用三个位图来表示不同的监测事件。而poll统一用一种结构来管理要监测的事件。#include<poll.h>int poll(struct pollfd* fds,nfds_t nfds,int timeout);参数: fds: 它是一个结构体数组,其中元素的类型如下: struct pollfd{ int fd原创 2017-03-17 11:04:16 · 828 阅读 · 0 评论 -
HTTP长连接和短连接
1、短连接 在HTTP/1.0版本中,默认使用的是短连接,也就是说浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。如果客户端浏览器访问某个HTML或其他类型的Web页中包含其他的web资源,则浏览器每遇到这样一个web资源,就会建立一个HTTP会话。2、长连接 从HTTP/1.1版本起,默认使用长连接用以保持连接特性。使用长连接的HTTP协议,会在响应消息报文段加入:原创 2017-04-04 16:36:09 · 1347 阅读 · 0 评论 -
tcp粘包浅析
1、什么是粘包 从接收缓冲区看,后一包的数据的头部紧接着前一包数据的尾部,使得接收方不能准确的读取一包数据,也就是接收方多读或少读一包数据所造成的现象就是粘包现象。 粘包只会在TCP的长连接时才可能发生,因为TCP是面向字节流的,以流的方式处理数据,当长连接时才可能有多个数据包粘在一起的情况。UDP是面向数据包的,有固定的消息边界。2、为什么会有粘包 粘包既可能是发送方原创 2017-04-06 09:40:47 · 882 阅读 · 0 评论 -
TCP/IP四层模型中协议的格式
1、以太网帧格式2、ARP数据报格式 3、IPV4数据报格式如下: IP数据包的首部长度和数据长度都是可变的,但总是4的整数倍。 4位版本:IPV4的版本号是4。 4位首部长度:它里面的数值是以4字节为单位的,最小值是5,最大是15。即,首部长度最小是20字节(不带任何选项),最大是60字节。 8位服务类型(TOS):这个字段有3个位来表示IP数据包的优先级(目前已经废弃不用),还有4原创 2017-04-20 14:43:15 · 1794 阅读 · 0 评论 -
天气推送服务器
1、主要功能 用户通过天气推送服务器暴露出来的接口进行注册,注册完毕之后用户可以添加一些自己的亲朋好友的信息。每天定时爬取全国的天气,然后推送给用户的亲朋好友。 2、服务器 服务器使用的是一个协程版本的web服务器,支持get和post方法,底层用CGI方法处理带参数的请求。服务器对外暴露两个接口,用来进行注册和登录。 要登录的话,必须要有一个账号和密码,可以通过注册原创 2017-05-11 15:32:41 · 3463 阅读 · 0 评论 -
网络畅聊系统
1、网络聊天系统简介 简单来说,这个聊天系统可以达到群聊的目的。客户端向服务器发送消息,服务器对这条消息进行转发。由于使用的是udp协议,所以服务器会维护一张用户列表,这个列表记录了所有向服务器发送过消息的客户地址。当某个客户端退出的时候,会向服务器发送一条特殊的指令,然后服务器将该客户地址从用户列表中删除。2、Udp聊天系统原理图 从上图可以看到,服务器端使用生产者消费者模型原创 2017-05-12 10:23:18 · 2672 阅读 · 0 评论 -
Reactor模式和Proactor模式
一、Reactor模式(反应器模式) 1、Reactor模式的特点 Reactor用于同步I/O,同步是指用户进程触发IO操作并等待或去轮询的查看I/O操作是否就绪,如果事件就绪的话需要应用程序自己读取或写入数据。(Reactor模式需要用户自己进行I/O操作)。 并发系统常用Reactor模式代替常用的多线程的处理方式,节省系统的资源,提高系统吞吐量。 2、使用同步I/O模原创 2017-05-25 09:41:18 · 1455 阅读 · 0 评论 -
两种高效的并发模式
并发编程的目的是让程序”同时”执行多个任务。如果程序是计算密集型的,并发编程并没有什么优势,反而由于任务的切换使效率降低。但如果程序是I/O密集型的,那就不同了。 I/O操作通常分为两个阶段,即等待和数据搬迁,通常等待所花费的时间比较多。而I/O操作的速度远远低于CPU的计算速度,所以让程序阻塞在I/O操作将浪费大量的时间。如果程序有多个执行线程,则当前被I/O操作阻塞的线程可以放弃CP原创 2017-05-25 15:01:07 · 2404 阅读 · 0 评论 -
半同步/半反应堆线程池
一、什么是线程池 线程池是服务器预先创建的一组线程,这些线程运行着相同的代码,并具有相同的属性。当有新的任务到来的时候,主线程通过某种方式选择线程池中的某一个线程来为之服务,服务完之后又放回线程池中。二、为什么要有线程池 相比于动态创建线程来说,线程池可以提高速度。因为线程的创建和销毁是需要时间的,如果我们预先创建好,用完之后再回收的话,则会节省不少时间。一般线程池中线程的数量原创 2017-05-28 21:21:04 · 2646 阅读 · 0 评论 -
ftp服务器实现
在模拟实现FTP服务器之前,我们先来了解一下有关FTP的功能以及工作原理。一、什么是FTP ftp(File Transfer Protocol)文件传输协议。ftp是应用层协议,基于C/S结构,底层使用TCP/IP协议来保证可靠性。 ftp使得主机间可以共享文件,简单来说就是可以在两台计算机之间来回拷贝文件。 ftp服务的基本过程就是:建立连接、传输数据与释放连接。由原创 2017-06-09 22:59:36 · 10602 阅读 · 4 评论 -
剖析tinyhttpd服务器
tinyhttpd是一个小型的http服务器,虽然小但是功能也多,剖析tinyhttpd有助于理解http服务器的工作流程,加深对web服务器的认识。 一、原理图 二、源码剖析 下面是tinyhttpd的源码,自己对它进行了剖析,并对绝大多数内容加上了注释。#include <stdio.h>#include <sys/socket.h>#include <sys/types.h>#in原创 2017-07-07 13:09:27 · 1220 阅读 · 0 评论 -
小型HTTP服务器
本文的重点是介绍HTTP服务器的框架结构,旨在了解HTTP服务器的工作流程,所以我们在下面我们会实现一个多线程的HTTP/1.0版本服务器,这个HTTP服务器主要支持GET和POST方法。在实现HTTP服务器之前,我们首先要了解HTTP协议,CGI协议等: http协议一、web框架的原理图 如果使用非CGI方式处理浏览器的请求的话很简单,服务器直接将浏览器请求的资源返回即可。下面给出C原创 2017-04-10 13:38:47 · 3183 阅读 · 0 评论 -
I/O多路复用之select简介
系统提供select函数用来实现I/O多路复用输入/输出模型。select系统调用是用来让我们的程序监视多个文件描述状态变化的。程序会停在select这里等待,直到被监视的文件描述符有一个或多个发生状态变化。通常I/O操作有两个步骤,一个是等,另一个是数据搬迁。select主要是在等的这个状态阻塞着直到事件发生。头文件:#include<sys/select.h>#include<sys/type原创 2017-03-15 22:54:02 · 964 阅读 · 0 评论 -
HTTP协议
1、URL URL,统一资源定位符,它是一种特殊类型的URI,包含了用于查找某个资源的足够的信息。 URL格式:http://host[":"port][abs_path]http表示通过http协议来定位网络资源,host表示合法的主机域名或IP地址。port指定一个端口号,为空则使用缺省端口80,abs_path指定请求资源的路径,如果URL中没有给出abs_path,那么浏览器会自动会加上原创 2017-04-10 12:41:08 · 1751 阅读 · 0 评论 -
CRC校验算法
CRC(Cyclic Redundancy Check):循环冗余检验。在链路层被广泛使用的检错技术。 CRC原理: 1、发送端 1.1、在发送端先将数据分组,每组k个数据。假定要传送的数据是M。 1.2、在数据M后面添加供差错检测的n位冗余码,然后构成一帧发送出去,一共发送(k+n)位。 虽然添加n位冗余码增大了数据传送的开销,但是可以进行差错检测,当传输可能出现差错时,付出这种代价是值原创 2017-02-27 21:43:10 · 4842 阅读 · 0 评论 -
TCP第四次挥手为什么要等待2MSL
当客户端进入TIME-WAIT状态的时候(也就是第四次挥手的时候),必须经过时间计数器设置的时间2MSL(最长报文段寿命)后,才能进入关闭状态,这时为什么呢??? 这最主要是因为两个理由:1、为了保证客户端发送的最后一个ACK报文段能够到达服务器。因为这个ACK有可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。服务器会超时重传这个FIN-ACK,接着客户端原创 2017-03-05 15:58:52 · 10868 阅读 · 0 评论 -
ARP地址解析协议
ARP:地址解析协议,用来将IP地址转化成MAC地址的。 在网络通信中,数据包首先被网卡接受到再去处理 上层协议,如果接受到的数据包的硬件地址与本机不符,则直接丢弃。所以当数据报到达目标网段后,需要知道目的主机的MAC地址才能通信。 到达目的网段后,源主机发出ARP请求,询问目的主机的MAC地址是多少,并将这个请求广播到本网段,目的主机以太网地址填写FF:FF:FF:FF:FF:原创 2017-03-05 16:02:34 · 1359 阅读 · 0 评论 -
距离向量算法
路由: 1、数据包从源地址到目的地址所经过的路径,由一系列路由结点组成。 2、某个路由结点为数据报选择投递方向的选路过程。路由结点: 一个具有路由能力的主机或路由器,它维护一张路由表,通过查询路由表来决定向哪个接口接口发送数据包。接口:路由结点与某个网络相连的网卡接口。路由表:由很多路由条目组成,每个条目都指明去往某个网络的数据包应该经由哪个接口发送,其中最后一条是缺省路由条目。路由条目:路由原创 2017-03-05 16:05:44 · 18126 阅读 · 1 评论 -
TCP连接和释放
一、TCP连接过程 1、TCP连接状态图 TCP的三次连接中,客户端是主动链接,服务器是被动连接,整个过程有三次数据报文段的传送,所以TCP建立过程又称为三次握手。 服务器进程先创建传输控制块TCB,准备接受接受客户进程的连接请求,然后服务器进程就处于LISTEN(收听)状态,等待客户端的连接请求。传输控制块TCB里面存储了每一个连接中的一些重要信息,比如:TCP连接表、到发送和接受缓原创 2017-03-05 22:03:03 · 4014 阅读 · 2 评论 -
URG和PSH的区别
URG(紧急位):当URG=1的时候,紧急指针有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是从发送端向另一发送发送紧急数据的方式。数据从第一个字节到紧急指针所指字节就是紧急数据。数据段中的紧急数据不进入缓冲区就直接交给上层进程,而余下数据则要进入接收缓冲区。PSH(急迫位):PSH=1时,客户端发送给服务器的报文段立即被服务器TCP交付给应用进原创 2017-03-06 21:52:58 · 1417 阅读 · 0 评论 -
TCP的可靠性体现在哪里
TCP提供一种面向连接的、可靠的字节流服务。我们都知道两个使用TCP的应用,必须先建立TCP连接才能进行数据通信。那么TCP都有哪些机制来确保可靠性呢??? 1、超时重传 发送一个报文段,会立即启动一个重传计时器,等待目的端口确认收到这个数据段。否则将超时重传。2、确认响应 对于一个收到的请求,将发送一个确认。这个确认通常要延迟几分之一秒。3、首部校验 TCP数据报文段中有收和数据的校验和。原创 2017-03-10 15:35:02 · 2686 阅读 · 0 评论 -
为什么不建议客户端bind
1、为什么不建议对客户端进行bind? 首先要明确,客户端不是不能bind,他也可以bind,但是我们却不建议对客户端bind。 回想一下,服务器为什么要bind呢?因为服务器总是被动方,需要在一个众所周知的端口上等待连接请求,而且作为服务器它的端口号应该是固定的。服务器bind一个端口就表示会在这个端口提供一些特殊的服务。 而客户端它是主动发起方,我们并不关心是客户端原创 2017-03-10 15:36:37 · 4135 阅读 · 0 评论 -
bind为什么会出现地址重用
1、在客户端服务器模式中,如果服务器退出,然后立即重新启动的话,然后就出现”试图绑定一个已经在使用的端口”的错误,要等过一段时间之后才可以bind,这是为什么呢??? 或许你感到非常迷惑,明明服务器的套接字已经被关闭了,但为什么仍然禁止绑定端口。这是由于套接字处于TIME_WAIT状态引起的,这个状态会持续2MSL时间。在TIME_WAIT退出后,套接字被删除,该地址才能被重新绑定而不出现原创 2017-03-10 15:40:44 · 1990 阅读 · 0 评论 -
tcpdump工具
一、什么是tcpdump wireshark是windows下面的抓包工具,tcpdump是linux下的抓包工具。tcpdump可以将网络中传送的数据包完全截获下来提供分析。它支持对网络层、协议层、主机、网络或端口的过滤、并提供and、or、not等逻辑帮你去掉无用的信息。二、tcpdump的使用 tcpdump的参数主要是用来过滤的,因为网络中流量很大,如果不加分辨将所有数据包都截留原创 2017-03-10 15:45:27 · 1484 阅读 · 0 评论 -
端口号的分类
1、什么是端口号 在一台主机上运行了多个服务,主机为了区分这些服务,所以给每个服务都分配一个端口号,端口号唯一的标识这台主机上的某个服务。 IP地址唯一标识网络上的一台主机,服务器用通过端口号来区分不同的网络服务。所以IP地址+端口号就表示网络中唯一的一个服务。 客户端通常对它所使用的端口号并不关心,只要保证该端口在本主机上是唯一的就可以了。所以客户端端口号又叫做临时端口号,原创 2017-03-10 15:51:31 · 2488 阅读 · 0 评论 -
netstat命令
1、netstat是什么? netstat是在内核中访问网络相关信息的程序,它能够提供TCP连接、TCP和UDP监听、进程内存管理的状态。netstat也是一种控制台命令,是一个监控TCP/IP网络的非常有用的工具,他可以显示路由表、实际网络连接以及每一个网络接口设备的状态信息。使用netstat可以让用户知道有哪些网络连接正在运作,使用时如果不带参数,netstat显示活动的TCP连接。原创 2017-03-10 15:57:47 · 1120 阅读 · 0 评论 -
session和cookie学习
1、什么是cookie和session http协议是一种无状态的协议,浏览器对服务器的每一次请求都是独立的。为了使得web能够产生一些动态信息,就需要保存”状态”,而cookie和session机制就是为了解决http协议无状态而产生。cookie是一种在客户端保存状态的方案,session是一种在服务器端保存状态的方案。2、cookie和session的区别 我们举个栗子来描原创 2017-08-03 21:44:03 · 1048 阅读 · 0 评论