네트워크

8. Transport Layer

YJH3968 2021. 7. 1. 15:24
728x90

1. Transport layer

  • 트래픽이 특정 네트워크 애플리케이션으로 전달될 수 있도록 한다.
  • 신뢰할 수 있는 컴퓨터 네트워크를 위한 중요한 기능을 많이 담당하는데, 트래픽 multiplexing & demultiplexing, 장기 실행 연결 설정, 오류 검사 및 데이터 확인을 통한 데이터 무결성 보장을 포함한다.

2. Multiplexing & Demultiplexing

  • multiplexing : 네트워크의 노드가 여러 수신 서비스로 트래픽을 보낼 수 있음을 의미한다.
  • demultiplexing : 같은 노드를 목표로 하는 트래픽을 적절한 수신 서비스로 보낸다.
  • transport layer는 multiplexing과 demultiplexing을 port를 통해 처리한다.

3. Port

  • 16 bit 숫자로 네트워크로 연결된 컴퓨터에서 실행 중인 특정 서비스로 트래픽을 연결하는데 사용된다.
  • 특정 port에서 수신 대기하는 동안 네트워크 서비스가 실행된다. 
    ex) HTTP 또는 암호화되지 않은 웹 트래픽에 대한 기존 port는 80이다. 10.1.1.100이라는 IP를 수신 중인 컴퓨터에 대해 이 컴퓨터가 실행 중인 웹 서버로부터 웹페이지를 요청하면 트래픽은 그 컴퓨터의 port 80으로 향할 것이다.
  • 표기는 IP 주소 뒤에 colon으로 표기한다. ex) 10.1.1.100:80
    이를 socket address 또는 socket number라고 한다.
    ex) 같은 장치가 FTP(file transfer protocol server)를 실행 중인 경우, FTP는 port 21을 수신하므로 같은 IP에서 실행 중인 FTP 서버와 연결하고 싶다면 트래픽을 10.1.1.100:21(port 21)로 연결하면 된다.
  • 이러한 환경에서 하나의 서버가 기업 운영에 필요한 거의 모든 애플리케이션을 호스팅할 수 있다.

4. TCP segment

  • Ethernet frame이 IP datagram을 캡슐화 했듯이, IP datagram도 payload section이 있고 그 안에는 TCP segment로 이루어져 있다.
  • TCP segment는 TCP header와 data section으로 이루어져 있다.
  • data section은 application layer가 data를 저장하는 또 다른 payload area이다.

5. TCP header

  •  1. source port & destination port field
    • 길이 : 각각 16 bits
    • destination port는 트래픽이 요구하는 서비스의 port이다.
    • source port는 임시 port라는 port의 특수 section에서 선택한 높은 번호의 port이다.
    • 많은 발신 연결을 분리하기 위해 source port가 필요하다.
      ex) 웹 서버가 응답할 때 원래 요청을 하는 컴퓨터가 실제로 요청한 프로그램에 데이터를 보낼 수 있도록 원본 port가 필요하다.
  • 2. sequence number & acknowledgement number
    • 길이 : 각각 32 bits 
    • Ethernet frame에서 size에 한계가 있어 나누는 경우가 있을 수 있는데, TCP segment도 이와 마찬가지로 나누면 나중에 어떤 나열이었는지 복구하기 위해 필요하다.
    • sequence number : TCP segments의 나열에서 몇 번째 segment인지 알 수 있도록 한다.
    • acknowledgement number : TCP segments의 나열에서 다음 segment의 sequence number가 적혀 있다.
  • 3. data offset field
    • 길이 : 4 bits
    • TCP header의 길이
    • 이를 통해 수신 네트워크 장치는 실제 data payload가 언제 시작하는지 알 수 있다.
  • 4. TCP control flag
    • 길이 : 6 bits
  • 5. TCP window
    • 길이 : 16 bits
    • acknowledgement(인정)가 필요하기 이전에 보낼 수 있는 sequence number의 범위를 나타낸다.
    • TCP는 acknowledgement에 의존적이다.
      이는 기대하는 모든 data가 수신되었는지 확인하고 발신 장치가 수신하지 않는 data를 보내는데 시간을 낭비하지 않게 한다.
  • 6. checksum
    • 길이 : 16 bits
    • Ethernet과 IP와 같이 수신자가 segment를 받으면 checksum을 전체 segment에 대해 계산하고 header의 checksum과 비교해 data가 손상되었는지 확인한다.
  • 7. urgent pointer field
    • TCP control flag 중 하나와 함께 사용해 다른 것보다 우선순위가 높은 특정 segment를 지정한다.
    • 실제로 채택되지 않은 TCP의 기능으로 현대 network에서는 찾을 수 없다.
  • 8. option field
    • 거의 사용되지 않지만 더 복잡한 flow control protocol에 사용된다.
  • 9. padding
    • data payload section이 예상 위치에서 시작되도록 하기 위한 0의 나열

6. TCP Control Flag

  • TCP는 protocol로서 data segment들의 긴 chain을 전송하는데 이용하는 연결을 설정한다. 반면 Ethernet과 IP는 개별 데이터 packet을 보낸다.
  • TCP는 연결을 설정할 때 여러 TCP control flag를 구체적인 순서로 사용한다.
  • bit가 1로 설정되면 그 bit에 해당하는 flag가 실행 중임을 의미한다.
  • 1. URG
    • urgent의 줄임말
    • 해당 segment가 긴급한 상태임을 나타내고, urgent pointer field가 이에 대한 자세한 정보를 나타낸다.
    • TCP의 이 특성은 잘 쓰지 않는다.
  • 2. ACK
    • acknowledge의 줄임말
    • acknowledge number field를 검사해야 함을 의미한다.
  • 3. PSH
    • push의 줄임말
    • 수신 장치가 수신 엔드의 application에 현재 buffered된 data를 최대한 빨리 보내야 함을 의미한다.
    • buffer : 컴퓨터 기술로, 어떤 data가 다른 곳으로 전송되기 전에 어딘가에 hold되어 있는 것을 의미한다. TCP에서는 큰 data 덩어리를 가장 효율적으로 전송하기 위해 이용한다.
    • 만약 작은 양의 정보를 보내고 수신 프로그램으로부터 즉시 respond를 받기 위해서는 push flag가 필요하다.
  • 4. RST
    • reset의 줄임말
    • TCP 연결의 한 쪽이 손실 또는 손상된 segment의 나열을 복구할 수 없음을 의미한다.
    • 상대방이 보낸 segment를 합치는 것이 불가능해 reset한다.
  • 5. SYN
    • synchronize의 줄임말
    • TCP 연결을 처음 시작할 때 수신 엔드가 sequence number field를 검사해야 함을 알리기 위해 사용한다.
  • 6. FIN
    • finish의 줄임말
    • 송신 컴퓨터가 더 이상 보낼 data가 없어 연결을 끝내도 된다는 의미이다.

7. Three-Way Handshake

  • TCP 연결을 처음 시작할 때 송신자와 수신자가 주고받는 TCP segment들
  • 1. 송신 컴퓨터가 먼저 수신 컴퓨터에게 SYN flag가 설정된 TCP segment를 보내 연결을 시작하고 sequence number field를 봐서 통신이 시작됐음을 알게 한다.
  • 2. 수신 컴퓨터는 SYN와 ACK flag가 설정된 TCP segment를 보내 연결을 시작하고 sequence number를 확인했음을 전달한다.
  • 3. 송신 컴퓨터는 ACK flag가 설정된 TCP segment를 보내 수신 컴퓨터의 확인을 확인했고 본격적으로 data를 보냄을 알린다.
  • three-way handshake가 끝나면 TCP 연결이 시작되고 서로 간에 data를 자유롭게 송수신할 수 있다.
  • 양쪽에서 SYN/ACK pair를 보냈으므로 TCP 연결은 full duplex로 작동한다.
  • data를 보낼 때 각 segment는 ACK field가 설정되어 있어야 한다.

8. Four-Way Handshake

  • 연결이 끝날 때 송신자와 수신자가 주고받는 TCP segments
  • 1. 연결이 끝날 준비가 된 컴퓨터는 FIN flag를 보낸다.
  • 2. 다른 컴퓨터는 ACK flag를 보내 확인했음을 알린다.
  • 3. 이 컴퓨터 역시 연결이 끝날 준비가 되면 FIN flag를 보낸다.
  • 4. 이를 수신한 컴퓨터는 ACK flag를 보낸다.
  • 이론적으로, TCP 연결은 한쪽만 연결을 끝낸 simplex mode로 있을 수 있다. 하지만 이는 실제로 자주 사용하지는 않는다.

9. socket

  • TCP 연결에서 종단점의 instantiation * instantiation : 다른 곳에서 정의된 것의 실제 구현
  • TCP socket은 instantiate하기 위해서는 실제 프로그램이 필요하다.
  • 어떤 port로도 트래픽을 보낼 수 있지만, 프로그램이 그 port에 대한 socket을 열어야 응답을 받을 수 있다.
  • TCP socket은 여러 상태로 존재한다.

10. states of TCP socket

  • 1. LISTEN
    • TCP socket이 연결에 대해 준비 및 수신 대기하고 있음을 의미한다.
    • server side only
  • 2. SYN_SENT
    • 동기화(synchronization) 요청을 보냈지만 아직 연결이 되지 않음을 의미한다.
    • client side only
  • 3. SYN_RECEIVED
    • socket이 수신 대기 상태여서 동기화 요청을 받고 SYN_ACK를 보냈지만 client로부터 ACK을 받지는 않았음을 의미한다.
    • server side only
  • 4. ESTABLISHED
    • TCP 연결이 동작 중이고, 양쪽이 모두 서로에게 data를 보낼 수 있음을 의미한다.
    • both client and server sides(이를 포함한 아래 모든 state의 특징은 모두 이와 같다.)
  • 5. FIN_WAIT
    • FIN이 보내졌지만 ACK이 상대쪽에서 아직 오지 않았음을 의미한다.
  • 6. CLOSE_WAIT
    • TCP layer에서 연결이 끝났지만 socket을 연 애플리케이션은 socket에 대한 보류를 해제하지 않았음을 의미한다.
  • 7. CLOSED
    • 연결이 완전히 끝났고, 더 이상의 통신은 불가능함을 의미한다.
  • 다른 TCP socket state도 존재하고, 또한 socket state와 state의 이름은 운영체제에 따라 다르다. 이는 socket은 TCP의 정의에 벗어나는 영역이기 때문이다.
  • TCP는, TCP protocol을 이용하는 모든 장치가 통신이 성공적이기 위해선 정확히 같은 방법으로 사용해야 하기 때문에, protocol로서 사용 방법에 있어 보편적이지만, socket의 state를 어떻게 나타낼지를 정하는 것은 그리 보편적이지 않다.
  • 그러므로 TCP layer의 문제를 해결할 때, 해결하고자 하는 운영체제에 대한 정확한 socket state 정의를 확인해야 한다.

11. Connection-Oriented Protocol

  • 연결을 설정하고, 이를 이용해 모든 data가 적절히 전송되었는지 확인한다.
  • transport layer에서의 연결은 보내진 모든 data의 segment가 확인되었음을 내포한다.
  • 이러한 방법으로 연결의 양 끝은 항상 data가 다른 쪽으로 전송이 됐는지 안 됐는지를 안다.
  • 만약 사소한 문제로 전송이 제대로 안 되면 모든 frame이 버려진다.
  • TCP와 같은 connection-oriented protocol은 연결을 형성하고 지속적인 확인 stream을 통해 트래픽이 목적지에 도달하지 못 하는 경우를 방지한다.
  • Ethernet이나 IP는 checksum이 맞지 않으면 data를 버리는데, 이때 transport layer는 이 data를 언제 다시 보낼지를 결정한다.
  • TCP는 모든 data에 대해 ACK를 기대한다. 이를 통해 어떤 data가 성공적으로 도착했고 필요하다면 segment를 다시 보낼지 결정할 수 있다.
  • TCP는 일반적으로 segment를 sequential order로 보내지만, error로 인해 몇몇 segment가 다시 보내져야 할 때가 있다. 이 때 sequence number에 따라 segment를 올바른 순서로 나열할 수 있다.
  • 하지만 TCP와 같은 connection-oriented protocol은 많은 overhead가 발생한다. 연결 설정, 연속된 확인 stream 전송, 마지막에는 연결 종료 등 이들은 모두 추가 트래픽에 해당한다. 이들은 단지 data를 목적지에 반드시 보내야 하는 경우에만 유용하다.

12. Connectionless Protocol

  • UDP(User Datagram Protocol)이 가장 잘 알려진 protocol이다.
  • 연결에 의존하지 않고, 확인의 개념 또한 지원하지 않는다.
  • 단지 목적 port를 정하고 packet을 보낼 뿐이다.
  • 그다지 중요하지 않은 data를 보낼 때 유용하다.
  • ex) streaming video : 물론 모든 frame이 viewer에게 보내지면 좋겠지만, 몇 frame이 없어져도 큰 문제는 없다. TCP에 비해 overhead가 없어 높은 품질의 video를 보낼 수 있고, data 전송에 대한 가능한 대역폭을 절약할 수 있다.

13. Firewall

  • 어떤 기준을 충족하는 트래픽을 차단하는 장치
  • 네트워크에 들어오기를 원치 않는 트래픽을 막는 주요 방법이기에 네트워크 보안의 중요한 개념이다.
  • 네트워크의 여러 layer에서 작동한다. application layer traffic을 조사할 수도 있고, IP 주소의 어떤 범위를 막을 수도 있다. 그러나 가장 흔하게 사용되는 곳은 transport layer이다.
  • transport layer에서 작동하는 firewall은 어떤 port로의 트래픽을 허용하는 반면 어떤 다른 port로의 트래픽은 막는다.
  • ex) 작은 기업 네트워크가 하나의 서버를 가지고 있고, 그 서버는 여러 네트워크 장치를 호스팅하고 있다. 회사 웹사이트를 호스트하는 웹서버가 있고, 일급 기밀의 내부 document를 위한 파일 서버가 있다 하자. 네트워크의 경계에 있는 firewall은 아무나 웹페이지를 볼 수 있도록 port 80으로 트래픽을 보낼 수 있도록 구성하고, 다른 port로는 모든 외부 IP의 접근을 차단할 수 있다. 그렇게 해서 LAN 외부의 어떤 사람도 파일 서버에 접속할 수 없다.
  • firewall은 때때로 네트워크 장치와 독립적이지만 어디서나 실행 가능한 프로그램으로 생각하는 편이 좋다.
  • router와 firewall의 기능은 대부분 같은 장치에서 수행된다.
  • 그리고 firewall는 네트워크 장치 대신 개인 호스트에서 실행될 수 있다.
  • 모든 현대 주요 운영 체제는 firewall 기능을 내장하고 있다. 이러한 방식으로 firewall의 기능을 host 수준에서 수행할 수 있다.
728x90

'네트워크' 카테고리의 다른 글

10. Name Resolution  (0) 2021.07.04
9. Application Layer & 전체 layer의 동작 방식  (0) 2021.07.02
7. Routing  (0) 2021.06.30
6. Subnetting  (0) 2021.06.29
5. Network Layer  (0) 2021.06.29