[HTTP] IP와 TCP

Happy_Nerd·2022년 2월 20일
0

HTTP

목록 보기
1/3
post-thumbnail

IP (인터넷 프로토콜)

인터넷 프로토콜 역할

  • 지정한 IP 주소 (IP Address)에 데이터 전달
  • 패킷(Packet)이라는 통신 단위로 데이터 전달
💡 Packet
데이터 전송의 기본 단위
데이터를 주고 받을 때 정해 놓은 규칙
package와 bucket의 합성어

IP 패킷 정보

  • 사용자 데이터와 제어 정보로 이루어져 있다.
  • 사용자 데이터는 페이로드(payload) 라고 한다.
  • 제어 정보는 페이로드를 전달하기 위한 정보
    • 출발지 IP, 목적지 IP 등,,

IP 프로토콜의 한계

  • 비연결성
    • packet을 받을 대상이 없거나 서비스 불능 상태여도 packet 전송
    • 대상 서버가 packet을 받을 수 있는 상태인지 모르기 때문에 무조건 전송
  • 비신뢰성
    • 중간에 packet이 소실되어도 확인하지 않음. packet 전달 여부에 대해서 보장이 되지 않는다.
    • 여러 packet을 보냈을 때, packet의 전달 순서가 보장되지 않는다.
    • 전송 데이터가 큰 경우 한번에 보내지 않고 여러 개로 나눠서 전달하는데, 순서가 보장되지 않기 때문에 의도한 대로 데이터가 전달되지 못할 수 있다.
  • 프로그램 구분
    • 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 여러개일 때 구분이 어렵다.

TCP

IP(인터넷 프로토콜)에서 발생했던 문제점들이 TCP에서 해결이 된다.

인터넷 프로토콜 스택의 4계층

  • IP 위에 TCP를 올려서 IP의 단점을 보완
  • 네트워크 인터페이스 ⇒ LAN 드라이버, LAN 장비 등등

프로토콜 계층

채팅 프로그램으로 Hello, world!를 전달하려고 하면..

  1. socket 라이브러리를 통해 os 계층으로 데이터를 전달
  2. OS 계층에서 TCP 정보를 씌우고 IP 계층으로 전달
  3. IP 계층에서 IP에 관련된 데이터를 씌워서 패킷 생성
  4. LAN 카드를 통해서 밖으로 내보낼 때 Ethernet frame을 씌워서 보낸다.
    1. MAC 주소처럼 물리적인 정보가 포함되어있다.

IP 패킷 정보

IP 패킷의 구조에 대해 좀 더 자세히 찾아보면 출발지 IP, 목적지 IP 외에도 많은 데이터를 포함시키고 있다.

  • Version : IP의 버전 정보 (ex. IPv4..)
  • IHL : Internet Header Length. IP 헤더의 길이를 나타내는 값
  • TOS : Type of Service. 라우터에서 IP 데이터그램을 처리할 때 우선순위 결정에 사용된다.
  • TL : Total Length. 헤더를 포함한 데이터그램의 전체 길이를 의미한다.
  • Identification : 데이터그램이 단편화될 때 모든 단편에 이 값이 복사되고, 단편화된 데이터그램이 생성될 때마다 1씩 증가
  • Flag : 단편화의 여부를 알려주며 데이터가 단편화 조각에 첫번째인지 마지막인지 중간인지를 알려준다.
  • Fragment Offset : 데이터그램 안에서의 상대적 위치를 나타낸다
  • TTL : Time to Live. 패킷이 네트워크에 남아있을 수 있는 시간. 이 패킷을 처리하는 각 라우터는 TTL을 하나 이상 감소시킨다.
  • Protocol : IP 패킷의 데이터 부분이 전달되는 전송 계층 프로토콜. 상위 계층 프로토콜을 나타낸다.
  • Header Checksum : 패킷 전달 중 발생할 수 있는 오류 검사를 위해 사용하는 것. 송신측에서 체크섬을 계산하여 전송
  • Source Address : 출발지 주소
  • Destination Address : 목적지 주소
  • Options : 패킷의 옵션값을 지정
  • Padding : 옵션에 내용이 입력될 경우 옵션의 크기가 32배수로 마무리 될 수 있도록 크기를 0으로 채워준다.
  • Data : IP 패킷을 통해서 전송되는 데이터 부분

Version, TTL, Protocol, Header Checksum, Source Address, Destination Address, data 정도가 주요 요소라고 할 수 있다.

TCP/IP 패킷 정보

TCP 정보에 IP 정보가 감싸진 형태

💡 세그먼트 : TCP에서의 Packet
TCP는 바이트 스트림을 세그먼트라는 패킷으로 그룹화한다.

출발지 Port, 목적지 Port, 전송 제어, 순서, 검증 정보 등이 들어가있다.
IP 만으로는 해결이 되지 않던 순서 문제가 TCP 데이터로 해결이 된다.

TCP 특징

TCP는 신뢰할 수 있는 프로토콜. 현재 대부분 TCP를 사용한다.

전송 제어 프로토콜 (Transmission Control Protocol)

  • 연결 지향 - TCP 3 way handshake (가상 연결)
    • 연결을 하고 데이터 전송을 한다
  • 데이터 전달 보증
  • 순서 보장

TCP 3 way handshake

클라이언트와 서버가 통신할 때 (연결 과정)

  1. 클라이언트에서 먼저 SYN 메세지를 보냄
  2. 서버에서 SYN + ACK를 보냄
  3. 클라이언트에서 ACK로 응답
  4. 데이터를 전송하기 전에 3번 메세지를 주고 받으면서 연결이 되고 나면 그 때 데이터를 전송함

요즘은 최적화가 되어서 3번 ACK를 보낼 때 데이터도 같이 전송한다고 한다.
TCP/IP 연결은 진짜 물리적인 연결은 아니고 논리적인 연결이라서 개념적으로만 이해하면 된다!

여기서 SYN은 'synchronize sequence numbers', 그리고 ACK는'acknowledgment' 의 약자

데이터 전달 보증

클라이언트에서 데이터를 전송하면 서버에서 데이터를 잘 받았다는 응답을 보내준다.

순서 보장

큰 데이터를 보낼 때 패킷을 여러 개로 나눠서 전송하는 경우가 있다.
예를 들어 패킷1, 2, 3으로 나눠서 보냈는데 서버에서 패킷 1, 3, 2로 받은 경우,
서버에서는 클라이언트에게 패킷 2부터 다시 보내달라고 응답을 주고,
그렇게 되면 클라이언트에서는 패킷 2번부터 순서가 잘못갔다는 것을 인지할 수 있으니까 다시 패킷2부터 보내준다.

💡 3 way handshake, 전달 보증, 순서 보장 모두 
TCP 세그먼트에 전송 제어, 순서, 검증 정보가 들어있기 때문에 가능하다.

0개의 댓글