简单的网络知识

端口

端口号

端口就好一个房子的门,是出入这间房子的必经之路

如果一个程序需要收发网络数据,那么就需要有这样的端口

在linux系统中,端口可以有65536(2的16次方)个之多!

端口是通过端口号来标记的,端口号只有整数,范围是从0到65535

注意:端口数不一样的linux系统不一样,还可以手动修改

端口是怎样分配的

端口号不是随意使用的,而是按照一定的规定进行分配。

知名端口

IIS(HTTP):80

SQLServer:1433

Oracle:1521

MySQL:3306

FTP:21

SSH:22

Tomcat:8080

动态端口(Dynamic Ports)

动态端口的范围是从1024到65535

之所以称为动态端口,是因为它一般不固定分配某种服务,而是动态分配。

动态分配是指当一个系统程序或应用程序程序需要网络通信时,它向主机申请一个端口,主机从可用的端口号中分配一个供它使用。

当这个程序关闭时,同时也就释放了所占用的端口号

小总结

端口有什么用呢 ? 我们知道,一台拥有IP地址的主机可以提供许多服务,比如
HTTP(万维网服务)、FTP(文件传输)、SMTP(电子邮件)等
这些服务完全可以通过1个IP地址来实现。
那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP地址与网络服务的关系是一对多的关系。
实际上是通过IP地址+端口号来区分不同的服务的。
需要注意的是,端口并不是一一对应的。比如你的电脑作为客户机访问一台WWW服务器时,WWW服务器使用80端口与你的电脑通信,但你的电脑则可能使用3457这样的端口。

Socket简介

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket

建立网络通信连接至少要一对端口号(socket)
socket本质是
编程接口(API),对TCP/IP的封装

,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口
HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。

TCP介绍

TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义

TCP通信需要经过创建连接、数据传送、终止连接三个步骤。

TCP通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中,打电话

TCP特点

面向连接

通信双方必须先建立连接才能进行数据的传输,双方都必须为该连接分配必要的系统内核资源,以管理连接的状态和连接上的传输。

双方间的数据传输都可以通过这一个连接进行。

完成数据交换后,双方必须断开此连接,以释放系统资源。

这种连接是一对一的,因此TCP不适用于广播的应用程序,基于广播的应用程序请使用UDP协议。

可靠传输

TCP采用发送应答机制

TCP发送的每个报文段都必须得到接收方的应答才认为这个TCP报文段传输成功

超时重传

发送端发出一个报文段之后就启动定时器,如果在定时时间内没有收到应答就重新发送这个报文段。

TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。

错误校验

TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。

流量控制和阻塞管理

流量控制用来避免主机发送得过快而使接收方来不及完全收下。

TCP短连接

  1. client 向 server 发起连接请求

  2. server 接到请求,双方建立连接

  3. client 向 server 发送消息

  4. server 回应 client

一次读写完成,此时双方任何一个都可以发起 close 操作

操作步骤:

1
建立连接——数据传输——关闭连接...建立连接——数据传输——关闭连接

短连接.png

TCP长连接

  1. client 向 server 发起连接

  2. server 接到请求,双方建立连接

  3. client 向 server 发送消息

  4. server 回应 client

一次读写完成,连接不关闭

操作步骤:

1
建立连接——数据传输...(保持连接)...数据传输——关闭连接

长连接.png

TCP长/短连接的优点和缺点

长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间

对于频繁请求资源的客户来说,较适用长连接。

client与server之间的连接如果一直不关闭的话,会存在一个问题,

随着客户端连接越来越多,server早晚有扛不住的时候,这时候server端需要采取一些策略,

如关闭一些长时间没有读写事件发生的连接,这样可以避免一些恶意连接导致server端服务受损;

如果条件再允许就可以以客户端机器为颗粒度,限制每个客户端的最大长连接数,

这样可以完全避免某个蛋疼的客户端连累后端服务。

短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段。
但如果客户请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽。

TCP三次握手四次挥手

三次握手、四次挥手.png

TCP/IP协议(族)

早期的计算机网络,都是由各厂商自己规定一套协议,IBM、Apple和Microsoft都有各自的网络协议,互不兼容

为了把全世界的所有不同类型的计算机都连接起来,就必须规定一套全球通用的协议,为了实现互联网这个目标,互联网协议族(Internet Protocol Suite)就是通用协议标准。

因为互联网协议包含了上百种协议标准,但是最重要的两个协议是TCP和IP协议,所以,大家把互联网的协议简称TCP/IP协议(族)

常用的网络协议如下图所示:

TCP-IP协议族中各协议之间的关系.jpg
1355668682_9897.jpg

网际层也称为:网络层

网络接口层也称为:链路层

OSI参考模型

OSI参考模型.png

相关文章

正则表达式

Git使用教程

HTTP

GitHub搜索技巧