Car control script strange movement

I have made this script to control a car in the game, I’m using rb.AddForce to make it move which i think is not a good movement method for a car in the game and in the game the acceleration is slow then accelerates to about 200 in 1 sec all of a sudden which is unrealistic, So my questions is which is the best line of code for car movement. i have also tried the vector3.forward but then it flies around in the air like crazy and it has unrealistic physics then.

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class car : MonoBehaviour {

    public float thrust;
    public Rigidbody rb;

    public Text speedText;

    private float speed;
   
    public float drag;
    public float acceleration;
    public float breakpower;

    void Start () {
        rb = GetComponent<Rigidbody>();
    }

    void Update () {

        speedText.text = Mathf.Round(rb.velocity.magnitude * 3) + " kph";
        speed -= (drag * (speed / (drag * 75)));

        rb.AddForce(-transform.forward * speed  * Time.deltaTime);
        if(Input.GetKey ("up")) {
            speed += acceleration;
        }

        if(Input.GetKey ("down")) {
            speed-= breakpower;
        }
        if(Input.GetKey ("right")) {
            transform.Rotate(new Vector3(0.0f,1.0f,0.0f), (3));
        }
        if(Input.GetKey ("left")) {
            transform.Rotate(new Vector3(0.0f,-1.0f,0.0f), (3));
        }
    }
}

If you want you car to respond realistically under force, you need to use Newton’s Second Law: F=ma

For this you should set your game world up to the correct scale with realistic values. So the car must have a mass (m) and you decide how fast you want your car to accelerate (a). If your car accelerates from 0 m/s to 10 m/s over a time of 5 seconds, then your acceleration is 2 m/s/s (it is 2 m/s faster each second). So, set the mass on your rigidbody, then the force you apply to this is that mass multiplied by 2 multiplied by the time step.

Make sure you use the correct ForceMode in the AddForce method (see scripting ref). Honestly, I’ve been caught out with this before and can’t immediately remember which is the correct mode for this situation.

The alternative to all of this is to do your car position updates yourself using the kinematic mode on the rigidbody (or even remove the RB altogether). Using your knowledge of physics, you should probably be able to work out how to do this.