공부하면서 마주친적은 많은데 미뤄왔던 OSI 7계층입니다. 고작 사진 하나안에 알아야 할게 한가득 있어서 무서웠는데요..
이제 도망칠 곳이 없으므로 한 계층씩 도장깨기하는 심정으로 해치워보려고 합니다.
그래도 네트워크는 초기 설계때부터 지금까지도 본질적으로는 그대로인 부분이 많아 앞으로도 크게 안바뀐다고 합니다. 한번 배워두면 사골마냥 우려먹을 수 있다하니 숨참고 해보겠습니다.
오늘은 이 OSI 7계층에서 4계층에 속하는 TCP, 3계층에 속한 IP에 대해서 알아보겠습니다.
TCP와 IP가 층을 이루는 패킷 교환 네트워크 프로토콜의 집합입니다.
빈트 서프와 로버트 칸이 1973년경 처음 설계한 방식으로, 오늘날 인터넷상의 트래픽 대부분을 처리하는 프로토콜입니다.
전세계 모든 HTTP 통신은 TCP/IP를 통해 이루어집니다.
전송 중인 정보에 대해 균일한 전송 매커니즘과 공통 형식을 정의합니다.
IP 패킷 헤더
+ TCP 세그먼트 헤더
+ TCP 데이터 조각
으로 구성되어 있습니다.Ver
: 데이터그램을 생성한 IP 버전IHL
: IP 헤더의 길이TOS
: Type of Service.데이터 그램에 기대되는 QoS를 지시하는 8비트 코드Total length
: 헤더와 데이터 필드를 포함한 전체 데이터그램의 길이Identification
, flags
, Fragment offset
: 세그먼트의 처리 및 재조립에 사용되는 필드TTL
: Time To Live. 패킷의 출발지에서 초깃값이 설정되고, 각 게이트웨이를 거칠 때마다 값이 1씩 감소되는 1바이트짜리 필드. 0 까지 내려가면 패킷이 폐기Protocol
: 데이터 그램과 관련된 상위 계층 프로토콜을 식별Header checksum
: 전송 도중 헤더가 손상되지 않았는지 검사하는 용도의 필드Source address
: 근원지 주소Destination address
: 도착지 주소Options
: 경로배정 및 보안 등과 같은 제어 기능에 사용되는 부가정보구분 | IPv4 | IPv6 |
---|---|---|
길이 | 32비트 | 128비트 |
품질 제어 | 품질 보장 곤란 | 등급별, 서비스 별로 패킷을 구분할 수 있어 품질 보장이 용이 |
보안 기능 | IPsec 프로토콜 별도 설치 | 확장 기능에서 기본으로 제공 |
자동 네트워킹 | 곤란 | 있음 |
이동성 지원 | 곤란(비효율적) | 용이(효율적) |
IP를 사용하여 출발지에서 목적지의 특정 포트까지 임의 길이의 바이트 시퀀스를 전송하기 위한 안정적인 매커니즘을 제공합니다.
발신지 IP주소
, 발신지 포트
, 수신지 IP주소
, 수신지 포트
네 가지 값으로 식별합니다.Source Port
: 패킷을 송신하는 시스템의 포트번호Destination Port
: 패킷을 수신할 시스템의 포트번호Sequence Number
: 세그먼트 데이터의 순서번호Acknowledge Number
: 상대방으로부터 수신한 데이터의 바로 다음에 수신할 데이터 순서 번호Hedaer Length
: TCP 헤더의 길이Reserved
: 미래를 위해 예약된 필드로 항상 0으로 설정Flags
: 통신 컨트롤을 위한 6개의 제어 플래그URG
(긴급), ACK
(확인응답), PSH
(삽입), RST
(강제연결종료), SYN
(연결시작), FIN
(종료)Window Size
: 송신 시스템에서 자신이 수용하는 한 버퍼의 크기Checksum
: 데이터가 전송 중에 손실되지 않고 원본과 동일한지 검사Urgent Point
: Urgent flag 설정 시 urgent 데이터의 마지막 byte의 일련번호TCP/IP 프로토콜을 이용한 통신에서 연결, 연결 해제를 확인하는 방법입니다.
(🧗♀️=클라이언트 🧍=서버)
3-way
🧗♀️ : 내 말들려? (SYN, 커넥션 생성요청)
🧍 : 응 넌 들려? (SYN + ACK, 커넥션 요청이 받아들여졌음을 알림)
🧗♀️ : 응 나도 들려 (ACK, 커넥션이 잘 맺어졌음을 서버에게 알림)
연결 완료
4-way
🧗♀️ : 야 이제 끊을게 (FIN, 커넥션 종료요청)
🧍 : 기다려봐 하던거만 마무리 하고 (ACK, 커넥션 종료요청을 받았음을 알림)
🧍 : 이제 끊어도 돼 (FIN, 커넥션을 종료했음을 클라이언트에게 알림)
🧗♀️ : 응 끊을게 (ACK, 커넥션 종료를 확인했음을 서버에게 알림)
연결 해제 완료
TCP/IP 프로토콜을 이용하여 통신을 하는 응용프로그램이 데이터를 전송하기 전, 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정입니다.
1️⃣ 클라이언트는 서버에 접속을 요청하는 SYN
패킷을 보냅니다.
2️⃣ 서버는 SYN
요청을 받고 요청을 수락한다는 ACK
+ SYN
플래그를 클라이언트로 보냅니다.
3️⃣ 클라이언트는 서버에게 ACK
를 보내고 연결이 완료됩니다. 이후부터는 데이터가 오갈 수 있게 됩니다.
TCP/IP 프로토콜을 이용하여 통신을 하는 응용프로그램이 데이터를 전송하기 전, 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정입니다.
1️⃣ 클라이언트는 연결을 종료하고자 서버에 FIN
플래그를 보냅니다.
2️⃣ 서버는 FIN
플래그를 받은 뒤 ACK
패킷을 보낸 후 자신이 데이터를 모두 보낼때 까지 기다립니다.
3️⃣ 서버가 연결을 종료할 준비가 되면, FIN
플래그를 클라이언트에 전송합니다.
4️⃣ 클라이언트는 서버에 ACK
를 보내 응답합니다. ACK
응답을 받은 서버는 연결을 해제합니다.
참고
1일 1로그 100일 완성 IT지식
HTTP 완벽가이드
https://velog.io/@nnnyeong/Network-TCP-3-way-4-way-Handshake