知识点总结1-计算机网络

1.TCP的三次握手和四次握手

建立TCP的话,需要三次握手才能建立,而断开连接则需要四次挥手

三次握手:通俗描述就是(最主要是防止已过期的连接再次传到被连接的主机)

三次握手改成仅需要两次握手,可能发生死锁

(1) A对B说:我的序号是x,我要向你请求连接;(第一次握手,发送syn包,然后进入syn-send状态)

(2)B听到之后对A说:我的序号是y,期待你的下一句是x+1,同意建立连接(第二次握手,发送ack-syn包,然后进入syn-rcvd状态)

(3)A听到B说同意建立连接之后,对B说:已确认你同意和我连接(确认号ack=y+1,确认ACK=1,序列号seq=x+1)。(第三次握手,A已经进入established状态)

(4)B听到A的确认后,也进入established状态

四次挥手:通俗描述就是

(1) A与B交谈结束之后,A要结束此次会话,对B说:我要关闭连接了(序列号seq=u,终止FIN=1)。(第一次挥手,A进入FIN-WAIT-1)

(2)B收到消息后说:收到,你要关闭连接了。(序列号seq=v,

确认号ack=u+1,确认ACK=1)(第二次挥手,B进入CLOSE-WAIT)

(3)A收到B的确认后,等待了一段时间,因为B可能还有话要说。(此时A进入FIN-WAIT-2)

(4)B说完了它要说的话(只是可能还有话要说)之后,对A说,我要关闭连接了。(序列号seq=w,确认号ack=u+1,终止FIN=1,确认ACK=1)(第三次挥手)

(5)A收到B要结束的消息后说:已收到你要关闭连接的消息。(seq=u+1,ack=w+1,ACK=1)(第四次挥手,A进入到CLOSED状态)

(6)B收到A的确认后,也进入CLOSED状态

【注意】 在TIME_WAIT状态中,如果TCP client端最后一次发送的ACK丢失了,它将重新发送。TIME_WAIT状态中所需要的时间是依赖于实现方法的。典型的值为30秒、1分钟和2分钟。等待之后连接正式关闭,并且所有的资源(包括端口号)都被释放。

【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手?

答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

【问题2】为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。

---------------------

原文:https://blog.csdn.net/baixiaoshi/article/details/67712853


2.TCP和UDP的区别

Tcp是传输控制协议,UDP是用户数据报协议

TCP面向连接;UDP是无连接

TCP传输数据比较,但是无差错,不重复,不丢失基于字节流的运输层通信协议;UDP则具有较好的实时性,工作效率高,面向报文适用于高速传输和实时性较高的通信,但是不保证可靠交付。

TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多的通信模式;

TCP对系统资源要求较多,UDP对系统资源要求较少

        用UDP协议发送时,用sendto函数最大能发送数据的长度为:65535- IP头(20) - UDP头(8)=65507字节。用sendto函数发送数据时,如果发送数据长度大于该值,则函数会返回错误。  

        用TCP协议发送时,由于TCP是数据流协议,因此不存在包大小的限制(暂不考虑缓冲区的大小),这是指在用send函数时,数据长度参数不受限制。而实际上,所指定的这段数据并不一定会一次性发送出去,如果这段数据比较长,会被分段发送,如果比较短,可能会等待和下一次数据一起发送。


对于可靠性,TCP通过以下方式进行保证:

数据包校验:目的是检测数据在传输过程中的任何变化,若校验出包有错,则丢弃报文段并且不给出响应,这时TCP发送数据端超时后会重发数据;

对失序数据包重排序:既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对失序数据进行重新排序,然后才交给应用层;

丢弃重复数据:对于重复数据,能够丢弃重复数据;

应答机制:当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒;

超时重发:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段;

流量控制:TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这就是流量控制。TCP使用的流量控制协议是可变大小的滑动窗口协议。

 https://blog.csdn.net/caoshangpa/article/details/51530685

3.TCP/IP五层协议与OSI七层

(1)OSI七层模型


OSI中的层 功能 TCP/IP协议族

应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet

表示层 数据格式化,代码转换,数据加密没有协议

会话层 解除或建立与别的接点的联系 没有协议

传输层 提供端对端的接口 TCP,UDP

网络层 为数据包选择路由 IP,ICMP,RIP,OSPF,BGP,IGMP

数据链路层 传输有地址的帧以及错误检测功能 SLIP,CSLIP,PPP,ARP,RARP,MTU

物理层 以二进制数据形式在物理媒体上传输数据 ISO2110,IEEE802,IEEE802.2

(2)TCP/IP四层模型的协议


应用层:向用户提供调用和访问网络中各种应用程序的接口

传输层:提供端到端的可靠的或不可靠的通信服务

网际层:主要负责相邻节点之间,数据分组的逻辑(ip)地址寻址与路由

网络接口层: 主要负责通过网络发送和接受IP数据报

1、一般TCP/IP的应用层或者OSI的会话、表示、应用层把数据称为数据或者信息,到了传输层把数据称为报文,到了最底层就是比特流了也就是字节流

2、字节就是散乱的数据  报文就是添加了标记,封装后的数据

五层

应用层———消息

传输层———数据段(segment)

网络层———-分组、数据包(packet)

链路层———-帧

物理层———-PDU(bit比特)

1、报文

报文是网络中交换和传输的数据单元,也是网络传输的单元。报文包含了将要发送的完整的数据信息,其长短不需一致。报文在传输过程中会不断地封装成分组、包、帧来传输,封装的方式就是添加一些控制信息组成的首部,那就是报文头。

2、分组

分组是在网络中传输的二进制格式的单元。用户发送的数据会被分成多个更小的部分,在每个部分的前面加上一些必要的控制信息组成的首部,有时也会加上尾部,就构成了一个分组。

3、数据包

数据包是tcp/ip协议通信传输中的数据单元,也称为包。数据包是从最上层,一层一层封装,知道网络层的,最后借助数据链路层发送出去的数据单元。

4、数据报

面向无连接(UDP)的数据传输,工作过程类似于报文交换。采用数据报方式传输时,被传输的分组称为数据报。

5、帧

帧是数据链路层的传输单元。将上层传输的数据添加一个头部和尾部,组成了帧。


物理层:中继器、集线器、还有我们通常说的双绞线也工作在物理层

数据链路层:网桥(现已很少使用)、以太网交换机(二层交换机)、网卡(其实网卡是一半工作在物理层、一半工作在数据链路层)

网络层:路由器、三层交换机

传输层:四层交换机、也有工作在四层的路由器

4.GET和POST的区别


GET请求把参数包含到URL里,POST通过request body来传递函数,

大多时候get用来获取数据,post用来传递数据

但其实get请求里也可以添加request body,post可以带上url参数

对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

从请求的大小看,GET请求的长度受限于浏览器或服务器对URL长度的限制,允许发送的数据量比较小,而POST请求则是没有大小限制的。

但是由于服务器原因,可能会选择忽略这些数据。

GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

最重要一点:然后GET是产生一个数据包,post产生两个数据包 

对于GET请求来说,浏览器会把HTTP header和data一次性发送出去,

而post先发送HTTP header 服务器返回100 continue,再发送data

5.当你输入一个网址/点击一个链接,发生了什么?


(1)当发送一个URL请求时,浏览器会开启响应的一个线程来处理这个请求,同时在远程DNS服务器上启动一个DNS查询,找到对应的ip地址

(2)浏览器与远程web服务器通过TCP三次握手来建立一个TCP/IP连接。

(3)一旦建立连接,浏览器会通过该连接向远程服务器发送HTTP的GET请求。远程服务器找到资源后并使用HTTP响应返回该资源。

6.TCP的拥塞控制

1.  拥塞:即对资源的需求超过了可用的资源。若网络中许多资源同时供应不足,网络的性能就要明显变坏,整个网络的吞吐量随之负荷的增大而下降。

拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提:网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络传输性能有关的所有因素。

    流量控制:指点对点通信量的控制,是端到端正的问题。流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。

    拥塞控制代价:需要获得网络内部流量分布的信息。在实施拥塞控制之前,还需要在结点之间交换信息和各种命令,以便选择控制的策略和实施控制。这样就产生了额外的开销。拥塞控制还需要将一些资源分配给各个用户单独使用,使得网络资源不能更好地实现共享。

2. 几种拥塞控制方法

    慢开始( slow-start )、拥塞避免( congestion avoidance )、快重传( fast retransmit )和快恢复( fast recovery )。

2.1 慢开始和拥塞避免

    发送方维持一个拥塞窗口 cwnd ( congestion window )的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞。

    发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。

    慢开始算法:当主机开始发送数据时,如果立即所大量数据字节注入到网络,那么就有可能引起网络拥塞,因为现在并不清楚网络的负荷情况。因此,较好的方法是 先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。通常在刚刚开始发送报文段时,先把拥塞窗口 cwnd 设置为一个最大报文段MSS的数值。而在每收到一个对新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值。用这样的方法逐步增大发送方的拥塞窗口 cwnd ,可以使分组注入到网络的速率更加合理。

7.cookie和session区别


1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗

考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能

考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、所以个人建议:

将登陆信息等重要信息存放为SESSION

其他信息如果需要保留,可以放在COOKIE中(搜索历史 访问站点所打的文字和选择等)

cookie的弊端:

cookie:数量和长度的限制

安全性问题:如果被拦截,就可获取所有的session信息

每次访问都要传送cookie给服务器,浪费带宽

有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。


8.HTTP HTTPS的区别

        1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用

  2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

  3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443

  4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

https之所以比http安全,是因为他利用ssl/TLS协议传输。它包含证书,卸载,流量转发,负载均衡,页面适配,浏览器适配,refer传递等。保障了传输过程的安全性

9. HTTP状态码

hTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码类型

1**:信息,服务器收到请求,需要请求者继续执行操作

2**:成功,操作被成功接收并处理

3**:重定向,需要进一步操作以完成请求

4**:客户端错误,请求包含语法错误或无法完成的请求

5**:服务器错误,服务器在处理请求过程中发生了错误

200 请求成功。

206 部分内容。服务器成功处理了部分get请求

迅雷等通过此类(响应实现断点续传或者将一个大文档分解为多个下载段同时下载)

     http请求字段range:

   格式: Range: bytes=start-end

   请求资源的部分内容(不包括响应头的大小),单位是byte,即字节,从0开始.

如果服务器能够正常响应的话,服务器会返回206 Partial Content 的状态码及说明.

  如果不能处理这种Range的话,就会返回整个资源以及响应状态码为 200 OK.

http的header分割符:\r\n

301 永久移动,请求资源已被永久的移动到新的URL

302 临时移动  资源只是临时被移动。客户端应继续使用原有URI

400 客户端请求的语法错误,服务器无法理解

401 请求需要用户的身份认证

403 服务器理解客户端的请求,但是拒绝执行此请求

404 服务器无法根据客户端的请求找到资源

500 服务器内部错误,无法完成请求

503 超载或系统维护,服务器暂时无法处理客户端的请求

10.HTTP协议的主要特点及组成


简单快速、灵活、无连接、无状态

简单快速:统一资源服务器、资源地址时固定的,请求资源只需传送对应的路径和方法即可

灵活:HTTP允许传输任意类型的数据对象。同一个http协议可以完成不同数据类型的传输

无连接:每次处理完请求后,连接就会断开

无状态:每次请求处理完断开,都不会有记录信息,再次请求,服务端也不能识别是否时同一个客户端。

组成:

报文分为:请求报文、响应报文

请求报文包括:

-请求行:主要包括请求方法、页面地址、协议版本

-请求头:由KEY/value组成,告诉服务端需要的资源类型

-空行:表示请求头结束,下边的都是请求体内容

-请求体:包括请求的一些数据

响应报文:响应行、响应头、空行与请求报文相差不多


11.socket接套字

包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口

套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

  服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

  客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

  连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容

  • 1、TCP为什么需要3次握手,4次断开? “三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端...
    杰伦哎呦哎呦阅读 3,467评论 0 6
  • 运输层协议概述 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是...
    srtianxia阅读 2,384评论 0 2
  • 传输层提供的服务 传输层的功能 从通信和信息处理的角度看 ,传输层向它上面的应用层提供通信服务,它属于面向通信部分...
    CodeKing2017阅读 3,579评论 1 9
  • 本书结构是自顶向下的,所以请按下列顺序阅读: 1.计算机网络自顶向下--应用层2.计算机网络自顶向下--运输层3....
    牛富贵儿阅读 2,683评论 0 3
  • 1. 基础知识 1.1 3种常见的计算机体系结构划分 OSI分层(7层):物理层、数据链路层、网络层、传输层、会话...
    Mr希灵阅读 19,814评论 6 120