网络连接详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络连接详解相关的知识,希望对你有一定的参考价值。

参考技术A

用户: 需求发起者。

数据传输过程图:

应用程序: 发起数据的传输交流过程。

过程:

过程:

过程:

过程:

过程:

过程:

过程:

注: OSI参考模型总结 - 小白的博客 - CSDN博客

访问服务器的过程可以通过 windows+R 快捷命令 --> 进入运行界面--->然后通过cmd 命令 --->进入控制台--->然后输入命令 tracert + 访问的域名网址-->查看访问过程。

ping命令来测试网络连接:

物理层常见故障:

硬件连接问题:1.接触不良2.硬件未连通

数据链路层故障:

1.MAC地址冲突不能上网;

2.交换机与计算机网卡的带宽协商不一致,网速不一致导致网络不通;

3.ADSL欠费导致网络不通;

4.将计算机错误的连接到VLAN(Virtual Local Area Network)。

注:

网络层故障:

1.计算机IP地址设置错误。

2.计算机没有设置网关。

3.计算机子网掩码配置错误。

4.沿途路由器路由表错误。

传输层故障:

表示层故障:

乱码问题(字符集对应错误)

应用层故障:

应用层程序配置问题(浏览器服务器的配置问题导致上网故障等)

物理层安全:

防止非法计算机接入公司网络(包括无线AP)

数据链路层安全:

1.设置WiFi密码,属于网络链路层添加秘钥的方法。

2.公司内部的交换机可以设置哪个Mac地址可以接入,设置接多少台计算机。

3.家里的ASDL拨号上网的需要登入账号密码。

4.划分不同的VLAN(Virtual Local Area Network)

网络层安全:

1.在路由器上设置ACL控制数据包转发,控制网络。

2.在计算机上设置网络安全,设置访问权限。

应用层安全:

发现软件漏洞,增补丁。

TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这种端点就叫做套接字(socket)或插口。套接字可以实现将多个客户连接到一个服务器。

它是网络通信中端点的抽象表示,包含进行网络通信必需的五种信息:1.连接使用的协议,2.本地主机的IP地址,3.本地进程的协议端口,4.远地主机的IP地址,5.远地进程的协议端口。

1.域: 套接字通信中使用的网络介质,常见的有AF_INET(因特网络)

2.类型:

a. 流式套接字(sock_stream): 用于提供面向连接、有序的、可靠的双向jie节流的链接式数据传输服务,由类型sock_stream指定,他是在AF_INET域中通过TCP/IP链接实现的。

b. 数据报套接字(sock_dgram): 提供了一种无连接的服务,是AF_INET域中通过UDP/IP链接实现的。

c. 原始套接字(sock_raw): 允许对较低层次的协议直接访问,比如IP、ICMP协议,他常用于检验新的协议的实现或者访问现有服务中配置的新设备。网络监听技术很大程度上依赖于socket_raw.

3.协议: 套接字协议一般采用默认值。即默认参数为0。

1.套接字是用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

2.当前应用进程需要使用网络进行通信时,就会发出系统调用,请求操作系统为其创建“套接字”,以便把网络通信所需要的系统资源分配给该应用进程。

3.操作系统为这些资源的总和,用一个叫做套接字描述符的号码表示,并把此号码返回给应用进程,应用进程所进行的网络操作都必须使用这个号码。

4.通信完毕后,应用进程通过一个关闭套接字的系统调用通知操作系统回收与该“号码”相关的所有资源。

1.连接创建阶段

a.套接字被创建后,其端口号和IP地址都是空的,应用进程调用bind(绑定)来指明套接字的本地地址(在服务器端调用bind时就是把熟知端口号和本地IP填写到已创建的套接字中)

b.服务器调用bind后 ,还必须调用listen(收听)把套接字设置为被动方式,以便随时接收客户的服务请求。(UDP服务器由于只提供了无限连接服务,不使用listen系统调用)

c.客户进程发送连接请求后,服务器紧接着调用accept(接受),以把客户进程发来的连接请求提取出来。(系统调用accept的一个变量就是要指明哪一个套接字发起的连接。)

2.数据传输阶段

客户和服务器都在TCP连接上使用send系统调用传送数据,使用recv系统调用接收数据。

3.连接释放阶段

一旦客户或者服务器结束使用套接字,就把套接字撤销,此时调用close释放连接和撤销套接字。应用层总结-系统调用和应用编程接口 - 十分残念的博客 - CSDN博客

其过程示意图如下:

网络编程的目的:

直接或间接地通过网络协议与其他计算机进行通讯。

网络编程的问题:

1.如何准确的定位网络上一台或多态主机。

2.找到主机后,如何快速高效的传输数据。

网络编程的对象:

传输层提供的面向应用的可靠或非可靠的数据传输机制。

网络编程流行模型:

1.CS模型(客户端/服务器模型)

2.BS模型(浏览器/服务器模型)

参考网络编程--Socket(套接字) - A-祥子 - 博客园

注: 扩展链接内关于TCP/IP的相关知识讲解也相当详细,可以参考浏览一下。

计算机网络——TCP三次四次握手详解

三次握手:建立TCP连接


连接建立过程:

  B的TCP服务器进程先创建传输控制块TCB(存储了每一个连接中的一些重要信息,如:TCP连接表,到发送和接收缓存的指针,到重传队列的指针,当前的发送和接收序号,等),准备接受客户进程的连接请求。然后服务器进程就处于LISTEN(收听)状态,等待客户的连接请求。如有,即作出相应。
  A的TCP客户进程也是首先创建传输控制模块TCB,然后向B发出连接请求报文段,这时首部中的同步为SYN=1,同时选择一个初始序号seq=x。TCP规定,SYN报文段(即SYN=1的报文段)不能携带数据,但要消耗掉一个序号。这时,TCP客户进程进入SYN-SENT(同步已发送)状态。
  B收到连接请求报文段后,如同意建立连接,则向A发送确认。在确认报文段中应把SYN位和ACK位都置1,确认号是ack=x+1,同时也为自己选择一个初始序号seq=y。注意。这个报文段也不能携带数据,但同样要消耗掉一个序号。这时TCP服务器进程进入SYN-RCVD(同步收到)状态。
  TCP客户进程收到B的确认后,还要向B给出确认。确认报文段的ACK置1,确认号ack=y+1,而自己的序号seq=x+1。这时,TCP连接已经建立,A进入ESTABLISHED(已连接状态)。
  当B收到A的确认后,也进入ESTABLISHED状态。
  以上便是三次握手的流程。

问题:

  1.为什么不可以是两次握手?为什么A还要发送一次确认?

  答:主要是为了防止已失效的连接请求报文段突然又传送到了B,因而产生错误。

  比如说这种异常情况:A发出的第一个连接请求报文段并没有丢失,而是在某些网络结点长时间滞留了,以致延误到连接释放以后的某个时间才到达B。本来这是一个早已失效的报文段。但B收到此失效的连接请求报文段后,就误以为是A又发出一次新的连接请求。于是就向A发出确认报文段,同意建立连接。假定不采用三次握手,那么只要B发出确认,新的连接就建立了。

  由于现在A并没有发出建立连接的请求,因此不会理财B的确认,也不会向B发送数据。但B却以为新的连接已经建立了,并一直等待A发来数据。B的许多资源就这样被浪费。

四次握手:TCP的连接释放


连接释放过程:

  过程高端、复杂,复制别人的(=。=):

  中断连接端可以是Client端,也可以是Server端。

  假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了

问题:

  1.为什么建立连接时是三次握手,而断开时需要四次握手?

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

以上是关于网络连接详解的主要内容,如果未能解决你的问题,请参考以下文章

网络协议概述:物理层连接层网络层传输层应用层详解

Altium Designer 网络连接方式Port和Net Label详解

网络协议分为哪几层---物理层,连接层,网络层,传输层,应用层详解

KestrelServer详解[2]: 网络连接是如何创建的?

网络通信——TCP “三次握手““四次挥手“ 详解

网络层详解----1