三次握手

tcp/ip协议做了啥

你离开我真会死。 提交于 2020-02-26 08:37:40
# 基础知识: - tcp/ip协议不是一个协议,是一个协议群,tcp/ip协议对应的四层模型,应用层、传输层、网络层、链路层。 ## 各层到底做了啥? - 链路层: 主要是将数据封装成数据帧,数据帧头部信息有源mac地址,目标mac地址,然后以广播形式通过物理介质(光纤、双绞线..)发送给目标主机。 为什么有ip地址还需要mac地址? ip地址是分配的,可变动的,mac地址是每块网卡的身份标识,主机接入互联网必须使用网卡,网卡地址是一个机器全球唯一标识,所以通过mac地址找目标主机更可靠。 有了MAC地址以后,以太网采用广播形式,把数据包发给该子网内所有主机,子网内每台主机在接收到这个包以后,都会读取首部里的目标MAC地址,然后和自己的MAC地址进行对比,如果相同就做下一步处理,如果不同,就丢弃这个包。 - 网络层: 发送者如何知道接收者的MAC地址?(arp协议) 发送者如何知道接收者和自己同属一个子网?(ip协议) 如果接收者和自己不在同一个子网,数据包如何发给对方(路由协议) 网络层有ip协议、arp协议、路由协议,主要是解决如上三个问题。 我认为该层主要是为了获取目标的mac地址。 ARP获取mac地址,ARP首先会发起一个请求数据包,数据包的首部包含了目标主机的IP地址,然后这个数据包会在链路层进行再次包装,生成以太网数据包

Linux-Python-Scapy的TCP扫描

﹥>﹥吖頭↗ 提交于 2020-02-26 05:57:52
TCP 连接扫描: 客户端与服务器建立 TCP 连接要进行一次三次握手,如果进行了一次成功的三次握手,则说明端口开放; TCP SYN 扫描(也称为半开放扫描或stealth扫描): 这个技术同 TCP 连接扫描非常相似。同样是客户端向服务器发送一个带有 SYN 标识和端口号的数据包,如果目标端口开发,则会返回带有 SYN 和 ACK 标识的 TCP 数据包; TCP 圣诞树(Xmas Tree)扫描: 在圣诞树扫描中,客户端会向服务器发送带有 PSH,FIN,URG 标识和端口号的数据包给服务器。如果目标端口是开放的,那么不会有任何来自服务器的回应。如果服务器返回了一个带有 RST 标识的 TCP 数据包,那么说明端口处于关闭状态 TCP FIN 扫描: FIN 扫描会向服务器发送带有 FIN 标识和端口号的 TCP 数据包。如果没有服务器端回应则说明端口开放。如果服务器返回一个 RST 数据包,则说明目标端口是关闭的。 TCP 空扫描(Null): 在空扫描中,客户端发出的 TCP 数据包仅仅只会包含端口号而不会有其他任何的标识信息。如果目标端口是开放的则不会回复任何信息。如果服务器返回了一个 RST 数据包,则说明目标端口是关闭的。 TCP ACK 扫描:ACK 扫描不是用于发现端口开启或关闭状态的,而是用于发现服务器上是否存在有状态防火墙的。它的结果只能说明端口是否被过滤

五分钟自学编程:计算机网络到底应该怎么学?!

自闭症网瘾萝莉.ら 提交于 2020-02-25 23:44:28
原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者。 思维导图 简介 上一期我讲到了数据结构怎么学,当时我的学习方法是先看视频,再看书,然后刷一刷基础算法题做巩固。 作为一个非科班考研党,当时觉得这个学习路线还是比较平滑的,毕竟能让我一个小白快速学会,这门课相对来说还是比较简单的。 于是,等我读研的时候,打算以相同的学习方式来补一下其他几门计算机基础课程,首当其冲的就是计算机网络。 因为这门课实在重要,几乎是面试必问的内容,什么TCP/IP三次握手,四次挥手,TCP和UDP区别,HTTP协议的一堆面试题,在程序员面试时都是很常见的考题,你们应该也深有体会。 计算机网络中的复杂概念远不止这些,那么按照老规矩,我们先来看一下计算机网络到底是个啥。 根据百度百科的介绍,计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 相比于数据结构的介绍,百科上对于计算机网络的介绍更加好懂一些,简单来说,计算机网络就是把计算机通过通信线路连接起来,实现网络互联和信息传递。 为什么要学计算机网络 在这个时代,离开了网络,简直没有办法生存,而我们所学的编程知识,脱了网络去谈也将毫无意义,毕竟没有哪个编程语言是只支持单机运行的。 作为一个编程学习者

python学习之网络编程

。_饼干妹妹 提交于 2020-02-25 22:11:18
socket编程 本地进程间通信(IPC) • 队列 • 同步(互斥锁、条件变量等) • 管道 网络进程间通信 问题: 本地通过进程PID来唯一标识一个进程,在网络中如何唯一标识一个进程? 网络层的“IP地址”可以唯一标识网络中的主机,而传输层的“协议+端口” 可以唯一标识主机中的应用程序(进程)。因此利用IP地址,协议,端口就 可以标识网络的进程。 什么是socket? socket(简称套接字) 是进程间通信的一种方式, 能实现不同主机间的进程间通信,我们 网络上各种各样的服务大多都是基于 Socket 来完成通信的。 创建socket 在 Python 中 使用socket 模块的函数 socket 就可以完成: socket.socket(AddressFamily, Type) 1). Address Family: AF_INET: IPV4用于 Internet 进程间通信 AF_INET6: IPV6用于 Internet 进程间通信 2). Type:套接字类型 SOCK_STREAM: 流式套接字,主要用于 TCP 协议 SOCK_DGRAM: 数据报套接字,主要用于 UDP 协 议 01_socket对象的建立 import socket #1. 创建socket对象 #family: AF_INET(IPv4) AF_INET6(IPv6) ========

Java基础:计算机网络——TCP/IP、HTTP

人盡茶涼 提交于 2020-02-25 20:27:16
一、OSI与TCP/IP各层的结构与功能,都有哪些协议? OSI的7层协议和TCP/IP的四层协议的优点折中出了——五层协议体系结构 1.1、应用层 作用:进程间通信的规则,不同的网络应用需要不同的应用层协议 有两个应用层协议需要了解: 域名系统DNS: 以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串. 例如:一个公司的 Web 网站可看作是它在网上的门户,而域名就相当于其门牌地址,通常域名都使用该公司的名称或简称。比如:IBM 公司的域名是 www.ibm.com、Oracle 公司的域名是 www.oracle.com HTTP协议(超文本传输协议) : 所有的 WWW(万维网) 文件都必须遵守这个标准 1.2、传输层 作用:负责向两台主机进程之间的通信提供 通用的数据传输服务 传输控制协议TCP : 面向连接、可靠 用户数据协议UDP: 面向无连接、不可靠、尽最大努力传输服务 1.3、网络层 作用:在 计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。 以下是IP层协议: IP协议 1.4、数据链路层 作用:两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议

Web架构之单机时代

给你一囗甜甜゛ 提交于 2020-02-25 17:16:02
一、单机性能优化基础 1. 单机时代-动静分离 Nginx + Tomcat 实现动静分离 优势: 1.Nginx记录访问日志,Tomcat关闭日志记录功能,来提高Tomcat的性能。 2.用Nginx做七层的处理,比如ssl证书,让Nginx来实现,比如根据url来做判断,如果pc访问 转到什么地方,手机访转到什么地方 Nginx+PHP实现动静分离 2.单机时代-数据库分离 将web服务器和数据库单独部署 3.单机时代-组件分离 静态服务器使用单独的服务器 静态服务器使用独立一级域名,防止cookie提交 http 链接和链接之间没有相互关系的,这个时候 引入session,存放在服务器端,客户端引入cookie,记录session ID 静态服务器可以使用多个二级域名提高加载速度 静态资源作为NFS,静态资源存放在NFS上 二、Socket基础和TCP三次握手 1.什么是socket 在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。 socket五元组 1.源IP地址 2.源端口 3.目的IP地址 4.目的端口 5.类型:tcp or udp 如何查看linux随机端口范围? cat /proc/sys/net/ipv4/ip

关于TCP协议的面筋整理

情到浓时终转凉″ 提交于 2020-02-24 20:16:14
TCP和UDP的特征及区别、分别适用于那些场景 特征 TCP:面向连接、面向字节流、提供拥塞控制、全双工、一对一通信、首部开销大(固定首部20字节)、提供可靠交付服务 UDP:无连接、面向报文、无拥塞控制、支持一对一、一对多、多对一、多对多的交互模式、头部开销小(仅8字节)、不可靠、时延小、实时性强 TCP报文段、UDP数据报首部相同部分:源端口、目的端口、校验和 区别 TCP是面向连接的;而UDP是无连接的,发送数据前不需要建立连接 面向连接的服务,通信双方在进行通信之前,要先在双方建立起一个完整的可以彼此沟通的通道(TCP三次握手建立连接),连接双方要为连接分配内核资源。在通信过程中,整个连接的情况一直可以被实时地 监控和管理 非面向连接的服务,不需要预先建立一个联络两个通信节点的连接,需要通信的时候,发送节点就可以往网络上发送信息,让信息自主地在网络上去传,一般在传输的过程中不再加以监控。 TCP提供可靠的服务,即通过TCP连接传送的数据无差错、不丢失、不重复且按序到达;UDP只是尽最大努力交付,不保证可靠【可能丢包、不保证有序】 TCP面向字节流;UDP面向报文段 TCP连接只能点对点,而UDP支持一对一、一对多、多对一、多对多的交互模式 TCP数据传输慢;UDP数据传输快 TCP首部开销大;UDP首部开销小 TCP逻辑通信是全双工的可靠通信;UDP是不可靠通信

DNS服务搭建和端口

泄露秘密 提交于 2020-02-24 19:52:28
一、DNS服务器的类型 ①Primary DNS Server(Master) 一个域的主服务器保存着该域的zone配置文件,该域所有的配置、更改都是在该服务器上进行,本篇随笔要讲解的也是如何配置一个域的主DNS服务器 ②Secondary DNS Server(Slave) 域从服务器一般都是作为冗余负载使用,一个域的从服务器是从该域的主服务器上抓取zone配置文件,从服务器不会进行任何信息的更改,zone配置文件的修改只能在主DNS服务器上进行,所有的修改都有主服务器同步 ③Caching only Server DNS缓存服务器不存在任何的zone配置文件,仅仅依靠缓存来为客户端提供服务,通常用于负载均衡及加速访问操作 二、安装BIND 对于DNS服务器软件现在有许多的程序可以使用,但是现今为止使用的最多最广泛的DNS服务器软件还是BIND(Berkeley Internet Name Domain),最早是由伯克利大学的一个学生开发的,现在的最新版本是版本9,由ISC进行编写和维护。 BIND支持目前市面上所有的主流操作系统,包括Linux、Windows、Mac OS等 我们的CentOS上并没有默认安装BIND这个软件,所以我们需要手动对其进行安装,这里使用yum的方式来进行安装 [root@xiaoluo ~]# yum install -y bind bind

理解TCP中的三次握手和四次分手

…衆ロ難τιáo~ 提交于 2020-02-24 04:55:13
1、前言 之前上过计算机网络这门课,由于当时初次接触计算机网络,其中的有些概念无法深入理解,只停留在表面。这次借着学网络编程的机会,也把TCP的三次握手和四次分手重新梳理了一遍,有了不同的理解。借此,想做一个总结。 2、TCP协议 在学习TCP三次握手和四次分手之前,首先得对TCP协议有一个大概的了解。TCP全称是传输控制协议,其是面向连接的,可靠的,基于字节流的传输层通信协议。相比与UDP(用户数据报协议)而言,具有以下几个特点: TCP协议是面向连接的。基于TCP协议,客户端和服务端要想传输数据,两者之间要先建立一个连接,然后客户端再跨该链接与服务端交换数据,最终终止连接。 TCP提供可靠性。当TCP的一端向另一端传输数据之后,要求收到数据的一端必须要返回一个确认,如果没有收到这个确认,那么发送端会自动重传数据病等待更长时间,数次失败之后才会放弃(4-10分钟)。TCP提供的是可靠传输,但并不保证数据一定会被对方给接收到。如果多次重传都失败的话,TCP就会放弃重传并通知用户。 TCP会给传输数据中的每一个字节关联一个序列号对所发送的数据进行排序。这样可以接受到的数据和发送的数据顺序保持一致并会包含重复数据。 TCP提供流量控制。TCP总是会告诉对方任何时刻它一次能接受多少字节的数据(通告窗口),从而确保发送端发送的数据不会使接受缓冲区溢出。通告窗口随时会发生改变

关于高负载服务器Kernel的TCP参数优化

删除回忆录丶 提交于 2020-02-24 02:03:22
net.ipv4.tcp_mem 内核分配给TCP连接的内存,单位是Page,1 Page = 4096 Bytes,可用命令查看: #getconf PAGESIZE 4096 net.ipv4.tcp_mem = 196608 262144 393216 第一个数字表示,当 tcp 使用的 page 少于 196608 时,kernel 不对其进行任何的干预 第二个数字表示,当 tcp 使用了超过 262144 的 pages 时,kernel 会进入 “memory pressure” 压力模式 第三个数字表示,当 tcp 使用的 pages 超过 393216 时(相当于1.6GB内存),就会报:Out of socket memory 以上数值适用于4GB内存机器,对于8GB内存机器,建议用以下参数: net.ipv4.tcp_mem = 524288 699050 1048576 (TCP连接最多约使用4GB内存) net.ipv4.tcp_rmem 和 net.ipv4.tcp_wmem 为每个TCP连接分配的读、写缓冲区内存大小,单位是Byte net.ipv4.tcp_rmem = 4096 8192 4194304 net.ipv4.tcp_wmem = 4096 8192 4194304 第一个数字表示,为TCP连接分配的最小内存 第二个数字表示