[네트워크] TCP/IP

유니·2022년 6월 12일
2

네트워크

목록 보기
1/3


공부하면서 마주친적은 많은데 미뤄왔던 OSI 7계층입니다. 고작 사진 하나안에 알아야 할게 한가득 있어서 무서웠는데요..
이제 도망칠 곳이 없으므로 한 계층씩 도장깨기하는 심정으로 해치워보려고 합니다.

그래도 네트워크는 초기 설계때부터 지금까지도 본질적으로는 그대로인 부분이 많아 앞으로도 크게 안바뀐다고 합니다. 한번 배워두면 사골마냥 우려먹을 수 있다하니 숨참고 해보겠습니다.

오늘은 이 OSI 7계층에서 4계층에 속하는 TCP, 3계층에 속한 IP에 대해서 알아보겠습니다.

TCP/IP

TCP와 IP가 층을 이루는 패킷 교환 네트워크 프로토콜의 집합입니다.
빈트 서프와 로버트 칸이 1973년경 처음 설계한 방식으로, 오늘날 인터넷상의 트래픽 대부분을 처리하는 프로토콜입니다.
전세계 모든 HTTP 통신은 TCP/IP를 통해 이루어집니다.

IP(Internet Protocol)

전송 중인 정보에 대해 균일한 전송 매커니즘과 공통 형식을 정의합니다.

  • 인터넷의 공통 매커니즘으로, 정보를 교환하기 위한 만국 공통어의 역할을 합니다.
  • 신뢰성 없는(unreliable), 비연결형(connectionless) 패킷 전송 서비스를 제공합니다.
    신뢰성 없는 : 패킷이 정상적으로 전송되는 것을 보장하지 않음
    비연결형 : IP 패킷이 자립적이며 다른 IP 패킷과 관계가 없음
  • 상태를 관리하거나 기억하는 기능이 없습니다.
  • 최대 크기는 약 65KB입니다.
  • 최대 크기 이상의 IP패킷은 작은 덩어리로 분할된 다음 수신부에서 재조합되어야 합니다.
  • 큰 IP 패킷은 여러 개의 작은 이더넷 패킷으로 분할됩니다.
  • 이더넷과 무선 시스템같은 특정 하드웨어 기술은 IP 패킷을 캡슐화하여 전송합니다.
  • IP 패킷은 IP 패킷 헤더 + TCP 세그먼트 헤더 + TCP 데이터 조각 으로 구성되어 있습니다.
  • IP 패킷

    Ver : 데이터그램을 생성한 IP 버전
    IHL : IP 헤더의 길이
    TOS : Type of Service.데이터 그램에 기대되는 QoS를 지시하는 8비트 코드
    Total length : 헤더와 데이터 필드를 포함한 전체 데이터그램의 길이
    Identification, flags, Fragment offset : 세그먼트의 처리 및 재조립에 사용되는 필드
    TTL : Time To Live. 패킷의 출발지에서 초깃값이 설정되고, 각 게이트웨이를 거칠 때마다 값이 1씩 감소되는 1바이트짜리 필드. 0 까지 내려가면 패킷이 폐기
    Protocol : 데이터 그램과 관련된 상위 계층 프로토콜을 식별
    ex) 6 : TCP, 17 : UDP
    Header checksum : 전송 도중 헤더가 손상되지 않았는지 검사하는 용도의 필드
    Source address : 근원지 주소
    Destination address : 도착지 주소
    Options : 경로배정 및 보안 등과 같은 제어 기능에 사용되는 부가정보

IPv4 vs IPv6

구분IPv4IPv6
길이32비트128비트
품질 제어품질 보장 곤란등급별, 서비스 별로 패킷을 구분할 수 있어 품질 보장이 용이
보안 기능IPsec 프로토콜 별도 설치확장 기능에서 기본으로 제공
자동 네트워킹곤란있음
이동성 지원곤란(비효율적)용이(효율적)

TCP(Transmission Control Protocol)

IP를 사용하여 출발지에서 목적지의 특정 포트까지 임의 길이의 바이트 시퀀스를 전송하기 위한 안정적인 매커니즘을 제공합니다.

  • 신뢰성 있는 양방향 스트림을 제공합니다.
  • 데이터는 언제나 보낸 순서에 맞게 도착합니다.
  • 전송 지연이 적고 오류 발생 확률이 낮습니다.
  • 언제든 어떤 크기로든 보낼 수 있습니다.
  • 세그먼트에는 오류 검출 정보가 포함되어 있어, 손상된 세그먼트를 찾아낼 수 있습니다.
  • TCP 스트림은 세그먼트로 나뉘어 IP 패킷을 통해 전송됩니다.
  • TCP 커넥션은 발신지 IP주소, 발신지 포트, 수신지 IP주소, 수신지 포트 네 가지 값으로 식별합니다.
    이 네가지 값을 동일하게 가지는 커넥션이 여러개일 수 없습니다.
  • TCP 패킷

    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 소켓 프로그래밍

  • TCP 종단 데이터 구조를 생성하고, 원격 서버의 TCP 종단에 그 종단 데이터 구조를 연결하여 데이터 스트림을 읽고 쓸 수 있습니다.
  • 소켓 API는 HTTP 프로그래머에게 TCP와 IP의 세부사항들을 숨깁니다.

3-way / 4-way handshacking

TCP/IP 프로토콜을 이용한 통신에서 연결, 연결 해제를 확인하는 방법입니다.

(🧗‍♀️=클라이언트 🧍=서버)

3-way
🧗‍♀️ : 내 말들려? (SYN, 커넥션 생성요청)
🧍 : 응 넌 들려? (SYN + ACK, 커넥션 요청이 받아들여졌음을 알림)
🧗‍♀️ : 응 나도 들려 (ACK, 커넥션이 잘 맺어졌음을 서버에게 알림)
연결 완료

4-way
🧗‍♀️ : 야 이제 끊을게 (FIN, 커넥션 종료요청)
🧍 : 기다려봐 하던거만 마무리 하고 (ACK, 커넥션 종료요청을 받았음을 알림)
🧍 : 이제 끊어도 돼 (FIN, 커넥션을 종료했음을 클라이언트에게 알림)
🧗‍♀️ : 응 끊을게 (ACK, 커넥션 종료를 확인했음을 서버에게 알림)
연결 해제 완료

3-way handshacking

TCP/IP 프로토콜을 이용하여 통신을 하는 응용프로그램이 데이터를 전송하기 전, 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정입니다.

1️⃣ 클라이언트는 서버에 접속을 요청하는 SYN 패킷을 보냅니다.
2️⃣ 서버는 SYN요청을 받고 요청을 수락한다는 ACK + SYN 플래그를 클라이언트로 보냅니다.
3️⃣ 클라이언트는 서버에게 ACK를 보내고 연결이 완료됩니다. 이후부터는 데이터가 오갈 수 있게 됩니다.

4-way handshacking

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

profile
추진력을 얻는 중

0개의 댓글